本文共 960 字,大约阅读时间需要 3 分钟。
【题目】
【题解】
题意:给你一个n个顶点m条边的无向连通图,沿着边走,每次遇到一个没走过的新顶点就记录下来,让你输出字典序最小的记录方式。给的边会存在多条连接相同两个顶点的情况和自环的情况。
思路:建立邻接表把顶点i的所有邻接点压入vec[i]。字典序最小当然从1开始走,把当前最小可到达点取出来压入队列queue,然后再把当前最小可到达点的所有邻接点插入到set。set有自动排序去重的功能,默认升序,那么第一个元素就是我们要找的下一个最小可到达点,然后记得删除压入queue的第一个元素。重复上述步骤,直到所有顶点都被压入queue,最后按queue顺序输出即可。
【代码】
#includeusing namespace std;const int inf=0x3f3f3f3f;vector vec[100005];int vis[100005]={0};int main(){ int n,m; scanf("%d%d",&n,&m); while(m--) { int u,v; scanf("%d%d",&u,&v); if(u==v) continue; vec[u].push_back(v); vec[v].push_back(u); } queue q; set se; int pos=1,sum=1; vis[pos]=1; q.push(1); while(sum
转载地址:http://pfben.baihongyu.com/