社区讨论
测试数据好像错了
P3956[NOIP 2017 普及组] 棋盘参与者 5已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mi6yw70a
- 此快照首次捕获于
- 2025/11/20 13:04 4 个月前
- 此快照最后确认于
- 2025/11/20 13:04 4 个月前
如题
第三个测试点如下
CPP输入
3 5
1 1 0
1 3 1
2 2 1
2 3 0
3 1 1
输出
ਸ਼
代码 :
CPP#include<iostream>
#include<stdio.h>
using namespace std;
int f[105][105],a[105][105];
bool o[105][105];
int n,m,i,j,x,y,t;
int dx[4]={1,-1,0,0},
dy[4]={0,0,1,-1};
void mset()
{
int i,j;
for (i=0; i<=104; i++)
for (j=0; j<=104; j++) f[i][j]=2e8;
}
int dfs(int x,int y,bool temp,int color)
{
if (x==n && y==n) return 0;
if (f[x][y]!=2e8) return f[x][y];
int i,tempx,tempy;
o[x][y]=true;
for (i=0; i<4; i++)
{
tempx=x+dx[i];
tempy=y+dy[i];
if (!o[tempx][tempy] && tempx>0 && tempx<=n && tempy>0 && tempy<=n)
{
if (temp==true)
{
if (a[tempx][tempy]==color) f[x][y]=min(f[x][y],dfs(tempx,tempy,true,a[tempx][tempy])); else
if (a[tempx][tempy]==0) f[x][y]=min(f[x][y],dfs(tempx,tempy,false,color)+2); else
f[x][y]=min(f[x][y],dfs(tempx,tempy,true,a[tempx][tempy])+1);
} else
{
if (a[tempx][tempy]==color) f[x][y]=min(f[x][y],dfs(tempx,tempy,true,a[tempx][tempy])); else
if (a[tempx][tempy]!=0) f[x][y]=min(f[x][y],dfs(tempx,tempy,true,a[tempx][tempy])+1);
}
}
}
o[x][y]=false;
return f[x][y];
}
int main()
{
mset();
cin>>n>>m;
for (i=1; i<=m; i++)
{
cin>>x>>y>>t;
a[x][y]=t+1;
}
f[n][n]=0;
dfs(1,1,true,a[1][1]);
if (f[1][1]==2e8) cout<<-1<<endl; else cout<<f[1][1]<<endl;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...