问题标题: 酷町堂:1051迷宫问题怎么错了

0
0
已解决
丁一
丁一
修练者
修练者

#include<iostream>
#include<cstring>
using namespace std;
int n,ans;
int map[11][11];
int sx[8]={-1,-1,-1,0,0,1,1,1},
 sy[8]={-1,0,1,-1,1,-1,0,1};
bool vis[11][11];
bool valid(int x,int y){
 if(x<=n&&y<=n&&x>=1&&y>=1)
  return true;
 return false;
}
void dfs(int x,int y){
 if(x==1&&y==n){
  ans++;
  return ;
 }
 else
  for(int i=1;i<=8;i++){
   int dx=x+sx[i];
   int dy=y+sy[i];
   if(map[dx][dy]==0&&valid(dx,dy)&&!vis[dx][dy]){
    vis[dx][dy]=1;
    dfs(dx,dy);
    vis[dx][dy]=0;
   }
  }
 return ;
}
int main(){
 cin>>n;
 memset(map,0,sizeof(map));
    memset(vis,0,sizeof(vis));
 for(int i=1;i<=n;i++)
  for(int j=1;j<=n;j++)
   cin>>map[i][j];
 vis[1][1]=1;
 dfs(1,1);
 cout<<ans<<endl;
 return 0;
}


1
已采纳
陶旭杰
陶旭杰
中级光能
中级光能

for(int i=1;i<=8;i++)
   

改成

for(int i=0;i<=7;i++)

因为你的数组sx和sy都是从0开始赋值的,所以循环也要从0开始。

改完以后就AC了!!!

祝你AC愉快!

0
0
我要回答