0
已解决
王梓澳
中级光能
中级光能
题目:
1051 迷宫问题
题目描述 Description
设有一个N*N(2<=n<10)方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中分别放0和1,0表示可通,1表示不能通过,入口和出口处肯定是0.迷宫走的规则如下所示:即从某点开始,有八个方向可走,前进方格中数字为0时表示可通过,为1时表示不可通过,要另找 路径。找到所有从入口(左上角)到出口(右上角)的路径(不能重复),输出路径总数,如果无法到达,则输出0.
样例输入 Sample Input
3
0 0 0
0 1 1
1 0 0
样例输出 Sample Output
2
我的代码:
#include <iostream>
using namespace std;
int n,map[15][15],ans;
bool vis[15][15];
int dir[9][2]={{0},{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{1,-1},{-1,1},{1,1}};
bool valid(int x,int y)
{
if (x>=1&&x<=n&&y>=1&&y<=n)
return true;
return false;
}
void dfs(int x,int y)
{
if (x==1&&y==n)
{
ans++;
return ;
}
for (int i=1;i<=8;i++)
{
int nx=x+dir[i][0],ny=y+dir[i][1];
if (valid(nx,ny)&&!vis[nx][nx]&&map[nx][ny]==0)
{
vis[nx][ny]=true;
dfs(nx,ny);
vis[nx][ny]=false;
}
}
}
int main ()
{
cin>>n;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
cin>>map[i][j];
vis[1][1]=true;
dfs(1,1);
cout<<ans;
return 0;
}
测试结果:这个是什么意思
王梓澳在2019-06-28 19:13:50追加了内容
还有这个程序它什么都不会输出。。。
王梓澳在2019-06-28 19:20:34追加了内容
额,那个我自己找到错了,是这写错了,我随机采纳一个吧