社区讨论
求助,悬赏关注
P9065 [yLOI2023] 云梦谣参与者 5已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @lo35g5xy
- 此快照首次捕获于
- 2023/10/24 01:06 2 年前
- 此快照最后确认于
- 2023/10/24 01:06 2 年前
CPP
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n,m,k,h[3005][3005],dx[4] = {1,-1,0,0},dy[4] = {0,0,1,-1};
bool vis[3005][3005],fly[3005][3005],isnot = false;
struct node
{
int x,y,step;
};
queue<node> q;
int bfs()
{
q.push({1,1,0});
vis[1][1] = true;
while(!q.empty())
{
int x = q.front().x,y = q.front().y,step = q.front().step;
q.pop();
if(x == n && y == m) return step;
for(int i=0;i<4;i++)
{
int xnew = x + dx[i],ynew = y + dy[i];
if(xnew < 1 || xnew > n || ynew < 1 || ynew > m || h[xnew][ynew] == 0 || vis[xnew][ynew] == true) continue;
q.push({xnew,ynew,step+1});
vis[xnew][ynew] = true;
}
if(isnot == false && fly[x][y] == true)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(fly[i][j] == true && vis[i][j] == false)
{
if(h[x][y] == h[i][j]) q.push({i,j,step+1});
else q.push({i,j,step+2});
vis[i][j] = true;
}
isnot = true;
}
}
return -1;
}
int main()
{
memset(vis,false,sizeof(vis));
memset(fly,false,sizeof(fly));
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&h[i][j]);
for(int i=1;i<=k;i++)
{
int x,y;
scanf("%d %d",&x,&y);
fly[x][y] = true;
}
int ans = bfs();
printf("%d\n",ans);
return 0;
}
为什么错了。
回复
共 9 条回复,欢迎继续交流。
正在加载回复...