1.迷宫问题
题目链接:https://ac.nowcoder.com/acm/problem/14572 来源:牛客网
#include<bits/stdc++.h>
using namespace std;
char mp[1005][1005];
int n,m,ax,ay,bx,by,vis[1005][1005];
struct su{
int x,y;
};
int dx[4]={
-1,0,1,0};//上,右,下,左
int dy[4]={
0,1,0,-1};
int main()
{
while(cin>>n>>m){
memset(vis,0,sizeof(vis));
memset(mp,0,sizeof(mp));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
if(mp[i][j]=='S'){
ax=i;ay=j;}
}
}
queue<su> q;
su s1;
s1.x=ax;s1.y=ay;
q.push(s1);
vis[ax][ay]=1;
int ans=-1;
while(!q.empty()){
su p=q.front();q.pop();
int x=p.x,y=p.y;
if(mp[x][y]=='E'){
ans=1;break;}
for(int i=0;i<4;i++){
int tx=x+dx[i],ty=y+dy[i];
if(tx < 1 || tx > n || ty < 1 || ty > m || mp[tx][ty] == '#') continue;
if(vis[tx][ty]==0){
su s2;
vis[tx][ty]=1;
s2.x=tx;s2.y=ty;
q.push(s2);
}
}
}
if(ans==-1) cout<<"No\n";
else cout<<"Yes\n";
}
return 0;
}
2.小妈妈找蝌蚪
题目链接:https://ac.nowcoder.com/acm/problem/14663
题目大意:青蛙妈妈回到家时,发现孩子走丢了。池塘里有很多石头,青蛙家在其中标号为s的石头上。小蝌蚪会移动k分钟,每分钟会出现在任意石头边,甚至多次出现在一块石头边。但k分钟之后,蝌蚪就游不动了。青蛙妈妈第0秒从家所在的石头出发,每分钟移动一次,可以留在原地,也可以跳跃到一块当前可跳跃到的石头上(只能在特定的石头间双向跳跃)。
问:青蛙妈妈最少几分钟发现蝌蚪宝宝
分析:即求出青蛙起点到任一点的最短时间
#include<bits/stdc++.h>
using namespace std;
int n,m,k,s;
const int N=100005;
int a[N],vis[N],x,y;
vector<int> v[N];//用于储存联通表信息
queue<pair<int,int> > q;
void bfs(){
memset(vis,0,sizeof(vis));//同v[]
while(q.size()) q.pop();// 同v[]
vis[s]=1;//标记家的位置
q.push(