1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#define MAXX 6
#define MAXY 6
#define FINX 3
#define FINY 5
// тут зберігається граф
int fa[MAXX][MAXY] = {
/*x y 0 1 2 3 4 5 */
/*0*/{1,0,0,0,0,0},
/*1*/{0,0,0,0,0,0},
/*2*/{0,0,0,0,0,0},
/*3*/{0,0,0,0,0,0},
/*4*/{0,0,0,1,0,0},
/*5*/{0,0,0,0,0,0}};
int fwas[200];
void show_way(int cnt, int was[200])
{
for(int x=0;x<cnt;x++) {
printf( "%d", was[x] );
if(x%2==0) printf( ";" ); else printf( " " );
}
printf( "\n" );
}
void show_matrix(int a[MAXX][MAXY])
{
for(int x=0;x<MAXX;x++)
for(int y=0;y<MAXY;y++) {
printf( "%d ", a[x][y] );
if(y==MAXY-1) printf( "\n" );
}
}
void array_walk(int x, int y, int lastx, int lasty, int a[MAXX][MAXY], int cnt, int was[200])
{
was[cnt]=x;
cnt++;
was[cnt]=y;
cnt++;
if(lastx>=0) a[x][y]=2;
if((x==FINX)&&(y==FINY)&&(lastx>=0)) {
a[FINX][FINY]=2;
for(int xx=0;xx<MAXX;xx++)
for(int yy=0;yy<MAXY;yy++)
if(a[xx][yy]==0) return;
printf("\n Way: \n");
show_way(cnt,was);
printf("\n Result: \n");
show_matrix(a);
printf( "\n Press Enter...\n" );
getchar();
return;
}
if((x<MAXX-1)&&(a[x+1][y]==0)) {
int newa[MAXX][MAXY];memcpy(newa, a, sizeof(newa));
int new_was[200];memcpy(new_was, was, sizeof(new_was));
array_walk(x+1,y,x,y,newa,cnt,new_was);
}
if((y<MAXY-1)&&(a[x][y+1]==0)) {
int newa[MAXX][MAXY];memcpy(newa, a, sizeof(newa));
int new_was[200];memcpy(new_was, was, sizeof(new_was));
array_walk(x,y+1,x,y,newa,cnt,new_was);
}
if((x>0)&&(a[x-1][y]==0)) {
int newa[MAXX][MAXY];memcpy(newa, a, sizeof(newa));
int new_was[200];memcpy(new_was, was, sizeof(new_was));
array_walk(x-1,y,x,y,newa,cnt,new_was);
}
if((y>0)&&(a[x][y-1]==0)) {
int newa[MAXX][MAXY];memcpy(newa, a, sizeof(newa));
int new_was[200];memcpy(new_was, was, sizeof(new_was));
array_walk(x,y-1,x,y,newa,cnt,new_was);
}
}
int main(void)
{
printf( "\n Input:\n" );
show_matrix(fa);
printf( "\n Press Enter...\n" );
getchar();
array_walk(0,1,FINX,FINY,fa,0,fwas);
getchar();
return 0;
} |