社区讨论
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 条回复,欢迎继续交流。
正在加载回复...