社区讨论

95pts 求debug

P3956[NOIP 2017 普及组] 棋盘参与者 6已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@mi6yxl44
此快照首次捕获于
2025/11/20 13:06
4 个月前
此快照最后确认于
2025/11/20 13:06
4 个月前
查看原帖
WA on #10
不知道是哪里锅了QAQAQ
代码水平还是菜啊
CPP
#include<iostream>
#include<cstring>
#include<cstdio>

using namespace std;

const int maxn=1010;
int mapp[maxn][maxn];
int ans=(1<<30);
int m,n;
int vis[maxn][maxn][2];

void dfs(int x,int y,int step,bool used){
    if(x>m||y>m||x<1||y<1)return;
    if(step>=vis[x][y][used])return;
    vis[x][y][used]=step;
    if(x==m&&y==m){
        ans=min(ans,step);
        return;
    }
    if(mapp[x][y]==0&&!used)return;
    if((mapp[x-1][y]^0)&&!(mapp[x][y]^mapp[x-1][y]))
        dfs(x-1,y,step,0);
    if((mapp[x][y-1]^0)&&!(mapp[x][y]^mapp[x][y-1]))
        dfs(x,y-1,step,0);
    if((mapp[x][y+1]^0)&&!(mapp[x][y]^mapp[x][y+1]))
        dfs(x,y+1,step,0);
    if((mapp[x+1][y]^0)&&!(mapp[x][y]^mapp[x+1][y]))
        dfs(x+1,y,step,0);
    
    if((mapp[x-1][y]^0)&&(mapp[x][y]^mapp[x-1][y]))
        dfs(x-1,y,step+1,0);
    if((mapp[x][y-1]^0)&&(mapp[x][y]^mapp[x][y-1]))
        dfs(x,y-1,step+1,0);
    if((mapp[x][y+1]^0)&&(mapp[x][y]^mapp[x][y+1]))
        dfs(x,y+1,step+1,0);
    if((mapp[x+1][y]^0)&&(mapp[x][y]^mapp[x+1][y]))
        dfs(x+1,y,step+1,0);
    
    if(!used){
        if(!(mapp[x-1][y]^0)){
            mapp[x-1][y]=mapp[x][y];
            dfs(x-1,y,step+2,1);
            mapp[x-1][y]=0;
        }
        
        if(!(mapp[x+1][y]^0)){
            mapp[x+1][y]=mapp[x][y];
            dfs(x+1,y,step+2,1);
            mapp[x+1][y]=0;
        }
        if(!(mapp[x][y+1]^0)){
            mapp[x][y+1]=mapp[x][y];
            dfs(x,y+1,step+2,1);
            mapp[x][y+1]=0;
        }
        if(!(mapp[x][y-1]^0)){
            mapp[x][y-1]=mapp[x][y];
            dfs(x,y-1,step+2,1);
            mapp[x][y-1]=0;
        }
    }
} 

int main()
{
    scanf("%d%d",&m,&n);
    memset(mapp,0,sizeof mapp);
    memset(vis,127,sizeof vis);
    for(int i=1;i<=n;i++){
        int x,y,c;
        scanf("%d%d%d",&x,&y,&c);
        mapp[x][y]=c+1;
    }
    dfs(1,1,0,0);
    if(ans>19260817)return puts("-1"),0;
    printf("%d\n",ans);
    return 0;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...