DFS迷宫

#include<stdio.h>
#define n 5//高 
#define m 5//宽 
int	a[n+2][m+2];//包含边界 
int min=99999999;
int flag[7][7]={0};
int step;
int way=0; 
struct point
{
	int x;
	int y;
};
int main()
{
	for(int i=0;i<=n+1;i++)
	for(int j=0;j<=m+1;j++)
	{
		scanf("%d",&a[i][j]);
	}
	void DFS(int x,int y,int step);
	/*
	1   1   1   1   1   1   1 
	1   0   0   0   1   0   1 
	1   0   1   0   0   1   1
	1   0   0   0   0   0   1
	1   0   0   1   0   0   1
	1   0   0   0   0   2   1
	1   1   1   1   1   1   1
	以1为边界
	用for循环输入迷宫 
	在此处假设0为空白道路,1为障碍物 ,2为终点  
	*/
	struct point start;
	for(int i=0;i<=n+1;i++)
	{for(int j=0;j<=m+1;j++)
	{
		
	printf("%5d",a[i][j]);
	}
	printf("\n");
	}
	scanf("%d %d",&start.x,&start.y);flag[start.x][start.y]=1;
	//printf("%d %d",a[5][5],flag[5][5]);
	DFS(start.x,start.y,0);
	printf("%d %d",min,way);
	return 0;
} 
void DFS(int x,int y,int step)
{
	if(x==5)
	{
		if(y==5)
		{
		if(step<min)
		min=step;
		way++;
		return;
		}
	}
		if(flag[x][y+1]==0&&a[x][y+1]!=1)
		{
			flag[x][y+1]=1;
			DFS(x,y+1,step+1);
			flag[x][y+1]=0;
			
		}
		if(flag[x+1][y]==0&&a[x+1][y]!=1)
		{
			flag[x+1][y]=1;
			DFS(x+1,y,step+1);
			flag[x+1][y]=0;	
		}	
		if(flag[x][y-1]==0&&a[x][y-1]!=1)
		{
			flag[x][y-1]=1;
			DFS(x,y-1,step+1);
			flag[x][y-1]=0;	
		}
		if(flag[x-1][y]==0&&a[x-1][y]!=1)
		{
			flag[x-1][y]=1;
			DFS(x-1,y,step+1);
			flag[x-1][y]=0;
		}
		return;
	
	
}

也可以利用方向变量例如

way_x[4]={0,1,0,-1};

way_y[4]={1,0,-1,0};这样DFS里就不用这么长了。

寒假也⑧放弃卷嗷,写的俩题让提交的不一样,但方法一样的·,一个是最少步数一个是方法种类,可以根据自己的题目改,嘻嘻,互相监督:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值