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);
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值