问题标题: 酷町堂:走迷宫问题思路

0
0

0
已采纳
曹博扬
曹博扬
初级天翼
初级天翼

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=0;i<=7;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;

看了这个应该就会了

0
张岳恒
张岳恒
资深光能
资深光能

搜索啊,搜,然后如果到尽头就回溯一步

从一开始搜

我要回答