问题标题: 酷町堂:2147:危险的森林

0
0
已解决
潘孝宇
潘孝宇
初级光能
初级光能

我是传送门

TLE:70

代码:

#include<bits/stdc++.h>
using namespace std;
int k,n,a,b,c,d,dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
bool m[102][102],v[102][102],flag;
char t;
void dfs(int x,int y){
    if(x==c && y==d){
        flag=true;
        return;
    }
    for(int i=0;i<4;i++){
        int dx=x+dir[i][0],dy=y+dir[i][1];
        if(!m[dx][dy] && !v[dx][dy] && dx>=1 && dx<=n && dy>=1 && dy<=n){
            v[dx][dy]=1;   //标记状态
            dfs(dx,dy);    //递归搜索
            v[dx][dy]=0;   //状态恢复
        }
    }
}
int main(){
    cin>>k;
    while(k--){
        cin>>n;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cin>>t;
                if(t=='s')m[i][j]=false; //可以走
                else m[i][j]=true; //不可以走
            }
        }cin>>a>>b>>c>>d;
        if(m[a][b]||m[c][d])cout<<"NO";
        else{
            v[a][b]=true;
            dfs(a,b);
            if(flag)cout<<"YES";
            else cout<<"NO";
            flag=false;

        }
        cout<<endl;
    }return 0;
}

求如何优化!

大佬快来 谢谢


0
1
0
0
0
0
黄昊轩
黄昊轩
新手守护
新手守护

这个是剪枝的问题

在dfs函数里面第一行加上

  • if(flag==true)
  • {
  • return ;
  • }
  • 这样
我要回答