问题标题: 酷町堂:3706 走迷宫 TLE90分

0
0
已解决
汪宇航
汪宇航
新手启示者
新手启示者
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
int n,m,t,sx,sy,ex,ey,ans=0x3f3f3f3f;
int dir[10][2]={{0},{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};
int vis[25][25];
bool a[25][25];
void dfs(int x,int y,int cnt){
    if(cnt>=ans) return ;//剪枝
    if(x==ex&&y==ey){
        ans=min(ans,cnt);
        return ;
 }
    for(int i=1;i<=8;i++){
        int dx=x+dir[i][0],dy=y+dir[i][1];
        if(dx>=1&&dy>=1&&dx<=n&&dy<=m && !vis[dx][dy]&&!a[dx][dy]){
            a[dx][dy]=true;
            dfs(dx,dy,cnt+1);
            a[dx][dy]=false;
        }
    }
    return ;
}
int main(){
    scanf("%d%d%d%d%d%d",&n,&m,&sx,&sy,&ex,&ey);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%d",&vis[i][j]);
        }
    }
    if(vis[m][n]==1){
        cout<<-1;
        return 0;
    }
    a[sx][sy]=true;
    dfs(sx,sy,0);
    if(ans!=0x3f3f3f3f)printf("%d",ans);
    else printf("-1");
    return 0;
}

???!!!

printf、scanf、火车头都用上了,可是?!

详情见图片

求第十个测试点!或者优化方法都行!


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

你的特判有问题

应该这样

if(vis[sx][sy]||vis[ex][ey]){
        cout<<-1;
        return 0;
    }

 

0
王文博
王文博
缔造者之神
缔造者之神

问题出自于特判出了问题,导致了**循环

输入:

16 13
4 10 13 8
0 1 1 1 1 1 1 0 1 0 0 1 0
1 0 0 0 1 0 1 1 0 0 1 1 0
1 1 0 1 0 0 1 1 0 1 1 0 1
0 0 0 0 0 1 0 0 1 1 1 0 1
1 1 1 1 0 1 0 1 0 0 0 0 0
0 0 0 0 0 0 0 1 0 1 1 1 0
0 1 1 0 0 0 0 0 0 0 1 1 0
0 1 0 1 1 1 1 0 0 1 1 0 0
1 1 1 0 1 1 1 0 1 1 1 1 1
0 0 1 0 1 0 0 0 1 1 1 0 0
0 1 1 1 1 0 0 0 0 0 1 1 0
0 0 0 1 1 0 0 0 0 1 1 1 0
0 1 1 1 1 0 0 1 1 0 1 1 1
1 1 0 1 1 1 0 0 0 1 1 0 1
1 0 1 0 1 1 0 1 1 1 0 0 0
0 0 1 0 1 1 0 0 0 1 1 1 0

输出:

-1

望采纳!(下次看测试点直接告诉我,无偿看哦!就算没做我也会故意做错把测试点看掉的)

我要回答