dfs走迷宫 算迷宫最小路径

输入m行n列的迷宫矩阵 0代表可以走 1代表围墙不能走 输入起点和终点,输出最短路径。

#include<stdio.h>
int a[51][51],book[51][51];
int ex,ey;//终点坐标
int min=9999;
int m,n;
void dfs(int startx,int starty,int step)
{
	int tx,ty,k;
	int way[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//走的方式 右下左上
	if(startx==ex&&starty==ey)//如果走到终点判断一下 min的值是否有变
	{
		if(min>step)
		min=step;
		return  ;
	}
	for(k=0;k<=3;k++)
	{
		tx=startx+way[k][0];	//tx、ty代表下一步要走的位置
		ty=starty+way[k][1];
		if(tx<1||ty<1||tx>m||ty>n)//判断是否越界
		continue;
	if(a[tx][ty]==0&&book[tx][ty]==0)//如果这个点能走 并且没被用过
		{
		book[tx][ty]=1;//将它定为1 表示用过
		dfs(tx,ty,step+1);
		book[tx][ty]=0;	//将它收回 很重要}
	}
		return ;
		}
  
 int main()
 {
 	int i,j;	int st,sy;//定义起点
 	scanf("%d%d",&m,&n);
 	for(i=1;i<=m;i++)
 		for(j=1;j<=n;j++)
 		{
 			scanf("%d",&a[i][j]);
		 }
		scanf("%d%d%d%d",&st,&sy,&ex,&ey);
		book[st][sy]=1;//先把起点定为1
		dfs(st,sy,0);//从起点开始 步数为0开始
		printf("%d",min);
 }
发布了18 篇原创文章 · 获赞 8 · 访问量 771

猜你喜欢

转载自blog.csdn.net/qq_45961321/article/details/104025622
今日推荐