9 9
1 1 6 8
0 0 1 0 0 0 1 0 1
0 0 1 0 0 0 1 0 0
0 0 0 0 1 1 0 1 1
0 1 1 1 0 0 0 0 1
0 0 0 1 0 0 1 0 0
0 0 0 0 0 1 0 1 0
0 1 1 1 1 0 0 1 0
1 1 0 0 0 1 0 1 1
1 1 0 0 0 0 0 0 0
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int move[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int map[20][20];
int visited[20][20];
//int endx,endy;
int m,n;
//m表示x,n表示yd
struct point{
int x;
int y;
}path[30];
int dfs(int x,int y,int endx,int endy,int &count){
//cout<<x<<y<<endl;
if(endx==x&&endy==y){
path[count].x=x;
path[count].y=y;
return 1;
}
int tempx,tempy;
if(map[x][y]==0&&visited[x][y]==0){
//visited==0表示没有访问过
path[count].x=x;
path[count].y=y;
count++;
visited[x][y]=1;
int flag=0;
for(int i=0;i<4;i++){
tempx=x+move[i][0];
tempy=y+move[i][1];
if(tempx>=0&&tempx<m&&tempy>=0&&tempy<n&&map[tempx][tempy]==0&&visited[tempx][tempy]==0){
//visited[tempx][tempy]=1;//多打了一个等于号就
flag=dfs(tempx,tempy,endx,endy,count);//走不下去才需要回溯
visited[tempx][tempy]=0;
if(flag==1)
return 1;
}
//}
}
}
count--;
return 0;
}
void main(){
scanf("%d%d",&m,&n);
memset(map,1,sizeof(map));
memset(visited,0,sizeof(visited));
int start_x,start_y;
int endx,endy;
int count=0;
scanf("%d%d%d%d",&start_x,&start_y,&endx,&endy);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
scanf("%d",&map[i][j]);
}
if(dfs(start_x,start_y,endx,endy,count)==1){
printf("可以到达\n");
for(int i=0;i<=count;i++){
printf("%d%d ",path[i].x,path[i].y);
}
}
else
printf("no\n");
getchar();
getchar();
return ;
}
1 1 6 8
0 0 1 0 0 0 1 0 1
0 0 1 0 0 0 1 0 0
0 0 0 0 1 1 0 1 1
0 1 1 1 0 0 0 0 1
0 0 0 1 0 0 1 0 0
0 0 0 0 0 1 0 1 0
0 1 1 1 1 0 0 1 0
1 1 0 0 0 1 0 1 1
1 1 0 0 0 0 0 0 0
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int move[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int map[20][20];
int visited[20][20];
//int endx,endy;
int m,n;
//m表示x,n表示yd
struct point{
int x;
int y;
}path[30];
int dfs(int x,int y,int endx,int endy,int &count){
//cout<<x<<y<<endl;
if(endx==x&&endy==y){
path[count].x=x;
path[count].y=y;
return 1;
}
int tempx,tempy;
if(map[x][y]==0&&visited[x][y]==0){
//visited==0表示没有访问过
path[count].x=x;
path[count].y=y;
count++;
visited[x][y]=1;
int flag=0;
for(int i=0;i<4;i++){
tempx=x+move[i][0];
tempy=y+move[i][1];
if(tempx>=0&&tempx<m&&tempy>=0&&tempy<n&&map[tempx][tempy]==0&&visited[tempx][tempy]==0){
//visited[tempx][tempy]=1;//多打了一个等于号就
flag=dfs(tempx,tempy,endx,endy,count);//走不下去才需要回溯
visited[tempx][tempy]=0;
if(flag==1)
return 1;
}
//}
}
}
count--;
return 0;
}
void main(){
scanf("%d%d",&m,&n);
memset(map,1,sizeof(map));
memset(visited,0,sizeof(visited));
int start_x,start_y;
int endx,endy;
int count=0;
scanf("%d%d%d%d",&start_x,&start_y,&endx,&endy);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
scanf("%d",&map[i][j]);
}
if(dfs(start_x,start_y,endx,endy,count)==1){
printf("可以到达\n");
for(int i=0;i<=count;i++){
printf("%d%d ",path[i].x,path[i].y);
}
}
else
printf("no\n");
getchar();
getchar();
return ;
}