迷宮問題(dfs)POJ - 3984

題目大意:有一個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;
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章