Пожалуйста, укажите мне на мои ошибки и помогите их исправить. И, если можно, помогите усовершенствовать программы. Только чтоб это все работало на C а не на C++. Заранее большое спасибо
"Лабиринт-ввод"
Условия:
Написать программу, позволяющую создавать лабиринты произвольного размера N*M, где M-колличество строк, а N- колличество столбцов. В каждом элементе таблицы находятся либо символ "." либо символ "x". Символ "x" обозначает "непроходимую клетку", тогда как клетки, содержащие точки, - "проходимы". Учитывать ограничения M<25, N<25. В программе в диалоговом режиме вводятся значения M и N. Далее оператор вводит построчно лаберинт, после ввода последней строки весь лабиринт выводитяся для проверки на экран. Оператор может исправлять лабиринт, вводя заново одну или несколько строк, в диалоговом режиме программа предлагает узнать номер строки для редактирования, если вводится отрицательное число, программа запрашивает имя выходного файла, выводит для контроля лабиринт на экран и затем лабиринт записывается в указанный файл.
Формат выходного файла:
В первой строке содержится два целых числа N и M, далее следует M строк , содержащих символы "." или "x"
Требования к прграмме:
Программа должна при вводе лабиринта воспринимать только символы "." и "x", остальные просто игнорировать(кроме конца строки). Ввод лабиринта должен быть максимально удобен для оператора.
| Код | #include <stdio.h> #includ <string.h> #define N10 char a[N+1]; main() { FILE*f; int i,j,jN,c,N; f=fopen("lab.txt", "w"); for (i=0;i<N;i++) { fgets(a[i],N+1,stdin); jN=strlen(a[i])-1; while (jN<N) a[i][jN++]='.'; a[i][N]='\n'; } fprintf(f,"%d %d\n", N,N); for (i=0;i<N;i++) { for(i=0;j<N;j++) { if ((a[i][j]!='.')&&(a[i][j]!='x')) a[i][j]='.'; fprintf(f,"%c",a[i][j]); } fprintf(f,"\n"); } fclose(f); }
|
"Лабиринт-решение"
Условия:
Написать программу, находящую кратчайший путь в лабиринте от левого верхнего квадрата до нижнего правого. Прграмма должна прочитать из файла лабиринт , созданный при помощи предыдущей программы, сохранить его в двумерном массиве. Для нахождения рекомендуется использовать "метод волны", заполняя в памяти массив числами, соответствующими пройденому от начального квадрата пути. Вывести найденый путь в лабиринте на экран
| Код | #include <stdio.h> #includ <string.h> char**a; main() { FILE*f; int i,j,jN,M,N; f=fopen("laberint.txt","r"); fscanf(f,"%d%d@",&M,&N); a=malloc(m*sizeof(char**)); for(i=0,i<M,i++) a[i]=malloc(N*sizeof(char)); for(i=0,i<N,i++) { fgets(a[i],N+1,f); strlen(a[i])-1; while (jN<N) a[i][jN++]='.'; a[i][N]='\n'; } int level=0; a[0][0]=0 while (a[N-1][N-1]=='.') { for(i=0,i<N,i++) for(j=0,j<N,j++) if(a[i][j]==level) { if(i-1)>0 if((a[i-1][j]!='x')&&(a[i-i][j]>level+1)) a[i-1][j]=level+1; if(j-1)>0 if((a[j-1][i]!='x')&&(a[j-j][i]>level+1)) a[j-1][i]=level+1; if((a[i+1][j]!='x')&&(a[i-i][j]>level+1)) a[i+1][j]=level+1; if((a[j+1][i]!='x')&&(a[j-j][i]>level+1)) a[j+1][i]=level+1; } level++; }
|
|