迷宫

迷宫

  • $ bfs $ 无法解决路径重叠问题?抑或是只是我不会?
  • $ dfs $ 解决上述问题
  • 递推答案 ? 好吧一开始想错了,这里的起点终点并不固定,\(移动规则无序\),递推没有方向啊.而不像 过河卒 一样.
  • 如果不是数据范围太小,此题还是可以的(当然并不是很难)
#include <iostream>
using namespace std;
const int MAXN=10+1;
int ok[MAXN][MAXN],n,m,t,sx,sy,fx,fy;
const int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
bool vis[MAXN][MAXN];
void dfs(int x,int y,int &ans)
{
	if(x==fx && y==fy){ans++;return;}
	vis[x][y]=true;
	for(int i=0;i<4;i++)
	{
		int a=x+dx[i],b=y+dy[i];
		if(a<=0 || a>n || b<=0 || b>m)continue;
		if(!vis[a][b] && ok[a][b])dfs(a,b,ans);
	}
	vis[x][y]=false;
}
int main()
{
	cin>>n>>m>>t>>sx>>sy>>fx>>fy;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)ok[i][j]=true;
	for(int i=1,x,y;i<=t;i++)
	{
		cin>>x>>y;
		ok[x][y]=false;
	}
	int ans=0;
	dfs(sx,sy,ans);
	cout<<ans;
	return 0;
}

快要放暑假了,但是考砸了不敢回去,,,只能在机房刷水题煎熬.....话说刚才Mr.Dang来我为何会说谢谢老师....看来脑子是烧坏了...

posted @ 2018-07-14 08:18  昤昽  阅读(86)  评论(0编辑  收藏  举报