P1605 迷宫.题解+解析

本题答案为原创.....

首先,做这题你得会DFS,我就不多说了,后面可能会出,现在去找别的博主先吧.....

好了,废话不多说,直接上代码好吧....C++代码如下

点个赞给个关注吧QwQ求求了.

//本题博主使用的时C++语言
#include<bits/stdc++.h>//头文件,个人喜欢用 
using namespace std;
int n,m,t;//不用讲吧.... 
int a[1005][1005],vis[1005][1005];//定义的地图数组和用来记录的visit数组 
int dx[4][2]={{1,0},{-1,0},{0,1},{0,-1}};//位移数组,我个人喜欢放在一个二维数组里
/*
int dx[4]={1,-1,0,0};//不喜欢用二维数组的可以用一维数组,但下面DFS中的xx和yy也要修改 
int dy[4]={0,0,1,-1};
*/ 
int sx,sy,fx,fy;//出发结束x,y点 
int ans=0;//记录有几条路可以走 
void DFS(int x,int y)//DFS整体 
{
	if(x==fx&&y==fy)//判断是否到达终点 
	{
		ans++;//记录 
		return ;//退出本次递归函数 
	}
	for(int i=0;i<=4-1;i++)//位移开始 
	{
		int xx=x+dx[i][0];//移动后的x点 
		int yy=y+dx[i][1];//移动后的y点
		/*
		int xx=x+dx[i];//一维数组的位移 
		int yy=y+dy[i];
		*/ 
		if(xx<=0||x>n||y<=0||yy>m)//判断是否跳出地图边界 
		{
			continue;
		}
		if(vis[xx][yy]==1)//判断是否走过 
		{
			continue;
		}
		if(a[xx][yy]==1)//判断是否是障碍 
		{
			continue;
		}
		vis[xx][yy]=1;//记录这条路走过了 
		DFS(xx,yy);//递归,前往下一层 
		vis[xx][yy]=0;//回溯,以备下一次用,不然的话在下一次走到这时会发现在之前走过了 
	}
}
int main()
{
	memset(a,0,sizeof(a));//把a数组全部归零,目前地图都可以走 
	cin>>n>>m>>t;//输入不用多说了吧.... 
	cin>>sx>>sy>>fx>>fy;
	for(int i=1;i<=t;i++)
	{
		int tx,ty;
		cin>>tx>>ty;
		a[tx][ty]=1;//把障碍部分设为1,让它不可走 
	}
	vis[sx][sy]=1;//要把起点设为1,不然会又走回来 
	DFS(sx,sy);//函数 
	cout<<ans<<endl;//最后输出.... 
    return 0;//大功告成! 
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值