題目大意:有一個5*5的迷宮 0 表示可以走 1 表示不可以走,輸出走出去的最短路線 從(0,0)到(4,4)
思路:dfs和bfs好像都可以 弱 當時只會dfs寫的dfs 很簡單的一個題,dfs寫下來就行了。不過需要用一個數組存儲
走過的路。數據有唯一性,優先右下方就可以過了 。bfs的話應該也可以不過需要記錄前驅,最後輸出
聽說這個題只有一組數據,打印就可以了0-0
#include<stdio.h>
#include<string.h>
int map[6][6];
int book[6][6];
int z[30][2];//保存路徑
int num=0;
int flag=0;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//方向
int check(int a,int b){//判斷是否可以走
if(a>=0&&a<5&&b>=0&&b<5&&book[a][b]==0&&map[a][b]==0)
return 1;
return 0;
}
void dfs(int x,int y,int n);
int main(void)
{
int i,j;
memset(book,0,sizeof(book));
for(i=0;i<5;i++){
for(j=0;j<5;j++){
scanf("%d",&map[i][j]);
}
}
book[0][0]=1;
dfs(0,0,0);
// printf("%d\n",num);
printf("(0, 0)\n");
for(i=0;i<num;i++){//輸出座標
printf("(%d, %d)\n",z[i][0],z[i][1]);
}
return 0;
}
void dfs(int x,int y,int n){
if(x==4&&y==4){
flag=1;
num=n;
return ;
}
int i;
for(i=0;i<4;i++){if(flag) return ;
int x_t=x+dir[i][0];
int y_t=y+dir[i][1];
if(check(x_t,y_t)){
book[x_t][y_t]=1;
z[n][0]=x_t;
z[n][1]=y_t;
dfs(x_t,y_t,n+1);
book[x_t][y_t]=0;
// z[n][0]=0;
// z[n][1]=0;
}
}
}