迷宫
迷宫
- $ 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来我为何会说谢谢老师....看来脑子是烧坏了...