#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
using namespace std;
int head[400010];
struct node{
int n_v;
int next;
}edge[400010];
int bfs(int n){
queue<int>q;
int vis[200010];
memset(vis,0,sizeof(vis));
int s = 1,e = n;
int vs;
q.push(1);
vis[1] = 1;
while(!q.empty()){
s = q.front();
q.pop();
for (int t = head[s];t!=-1;t = edge[t].next){
vs = edge[t].n_v;
if(vs == e)return 1;
if(vis[vs] == 0){
q.push(vs);
vis[vs] = 1;
}
}
}
return 0;
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
int u ,v;
int k = 0;
memset(head,-1,sizeof(head));
for (int i = 0;i<m;i++){
scanf("%d%d",&u,&v);
edge[k].n_v = v;
edge[k].next = head[u];
head[u] = k++;
edge[k].n_v = u;
edge[k].next = head[v];
head[v] = k++;
}
if(bfs(n))puts("POSSIBLE");
else puts("IMPOSSIBLE");
}
}
邻接表数组实现
最新推荐文章于 2023-12-09 16:36:12 发布