迷宫问题(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;
		}
	}
}


展开阅读全文

没有更多推荐了,返回首页