\(code\)
#include<bits/stdc++.h>
using namespace std;
int dis[105][105];
int xx[4]={1,0,-1,0},yy[4]={0,1,0,-1};
int a[105][105];
int vis[105][105]={0};
struct node
{
int x,y;
};
map<int,int> cnt;
map<int,int> ren;
int main()
{
memset(dis,0x3f,sizeof dis);
int n,m;
cin>>n>>m;
int startx,starty;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]==2)
{
startx=i;
starty=j;
}
}
}
//搜索,标记每个点离大本营的距离
queue<node> q;
q.push({startx,starty});
dis[startx][starty]=0;
while(q.size())
{
int x=q.front().x,y=q.front().y;
q.pop();
for(int i=0;i<4;i++)
{
int x1=x+xx[i],y1=y+yy[i];
if(x1>0&&x1<=n&&y1>0&&y1<=m&&a[x1][y1]==1)
{
if(dis[x1][y1]>dis[x][y]+1)
{
dis[x1][y1]=dis[x][y]+1;
q.push({x1,y1});
}
}
}
}
int k;
cin>>k;
for(int i=1;i<=k;i++)
{
int x,y;
cin>>y>>x;
if(!(x>m||y>n||y<0||x<0))
{
cnt[dis[x][y]]++;//距离的人数
ren[dis[x][y]]=i;//如果人数只有一个,那存储的人就是的
}
//printf("(%d,%d) :%d\n",x,y,dis[x][y]);
}
int flag=0,ans;
for(int i=0;i<=100000;i++)
{
if(cnt[i]==1)
{
cout<<ren[i]<<" "<<i;
flag=1;
}
if(flag) break;
}
if(!flag) puts("No winner.");
return 0;
}
标签:startx,starty,int,夺宝,L3,105,037,dis
From: https://www.cnblogs.com/pure4knowledge/p/18152834