问题标题: 酷町堂:3606 TLE 0分

0
0
已解决
俞景熙
俞景熙
高级守护
高级守护

#include<iostream>
using namespace std;
char map[1005][1005];
bool vis[1005][1005];
int dir[5][2]={{0},{1,0},{0,1},{-1,0},{0,-1}};
int n,sx,sy,tx,ty,min1=0x3f3f3f3f,cnt;
void dfs(int x,int y){
    if(cnt>=min1){
        return;
    }
    if(x==tx&&y==ty){
        min1=min(min1,cnt);
        return ;
    }
    for(int i=1;i<=4;i++){
        int dx=x+dir[i][0],dy=y+dir[i][1];
        if(dx>=0&&dy>=0&&dx<=n&&dy<=n&&map[dx][dy]=='0'&&!vis[dx][dy]){
            cnt++;
            vis[dx][dy]=true;
            dfs(dx,dy);
            vis[dx][dy]=false;
            cnt--;
        }
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>map[i][j];
        }
    }
    cin>>sx>>sy>>tx>>ty;
    vis[sx][sy]=true;
    dfs(sx,sy);
    cout<<min1<<endl;
    return 0;
}


0
已采纳
周琪岳
周琪岳
资深光能
资深光能

好像有时候就算DFS+最优性剪枝也没有bfs速度快唉

0
0
0
我要回答