电气工程师们刚刚为学校的计算机大楼布好了网线,可由于工作疏忽,从机房到办公室的网线有交叉。在机房,所有网线从左到右编号为1,2,3,…,N,而在办公室,网线从左到右不再是编号为1,2,3,…,N的线。工程师们无法确定办公室内线的顺序,但他们发现两条线最多只相交一次,而且检测出了任意两条线是否相交。如图1所示,实线表示两条线交叉,虚线表示不交叉。 给出每两条线是否交叉的信息,请计算办公室内从左到右各条网线的编号。例如,从图1的信息可以确定实际面线情况如图2所示。编号依次 3,2,4,1,5.

输入
输入包含多组测试数据,每组测试数据的格式如下: 第1行:两个空格分开的整数 N 和 M 。N(1≤ N ≤ 100) 表示网线的数据,M 表示发生交叉的数量。 接下来M行,每行是两个空格分开的整数A, B (1 ≤ A,B ≤ N) 表示编号为A的网线与编号为B的网线在某个位置发生了交叉。 在最后一组测试数据之后,用两个分开的0表示输入结束
输出
对每组测试数据,输出文件中用一行与其对应。该行列出了N个用1个空格分开的整数,表示办公室内从左到右各条网线的编号。 如果某组测试数据无解,则输出"IMPOSSIBLE"

从网上了解到是道简单题,但确实有些细节需要注意。从图中看很显然就是拓扑排序,只是要注意边的取向,还有不可能情况的判断。作为一个弱鸡,还花了我不少时间改错,忍着不去问别人,不过自己写好代码那时,实在是不可言喻的快乐;也没什么手段去找好的代码,网上也没看到过(是因为太简单吗)只得献上拙作 !(^ _ ^)!

#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,a,b,t,s;
int inde[101],nex[101],sx[101];
bool vis[101],mas[101][101],myv[101][101];
priority_queue< int,vector<int>,greater<int> >myq;
int chen(int x,int y)
{for(int j=x+1;j<=n;j++)if(sx[j]<y&&(!mas[sx[j]][y])){printf("IMPOSSIBLE");return n+1; }return x;
}
int main()
{scanf("%d%d",&n,&m);while(n!=0||m!=0){memset(nex,0,sizeof(nex));memset(inde,0,sizeof(inde));memset(vis,false,sizeof(vis));memset(mas,false,sizeof(mas));memset(myv,false,sizeof(myv));for(int i=1;i<=m;i++){scanf("%d%d",&a,&b);if(a>b){t=a;a=b;b=t;}if(a!=b){mas[a][b]=mas[b][a]=true;inde[a]++;myv[b][a]=true;}}for(int i=1;i<=n;i++){if(!inde[i]){myq.push(i);}}b=myq.top();t=0;while(!myq.empty()){t=nex[t]=myq.top();myq.pop();vis[t]=true;for(int i=1;i<=n;i++){if(myv[t][i]){inde[i]--;if((!vis[i])&&inde[i]==0){myq.push(i);}}}}s=0;while(b!=0){sx[++s]=b;b=nex[b];}a=1;for(int i=1;i<=n;i++){i=chen(i,sx[i]);if(i==n+1) a=0;}if(a) for(int i=1;i<=n;i++) printf("%d ",sx[i]);scanf("%d%d",&n,&m);}return 0;
}

【图论】电气工程师 ceoi相关推荐

  1. 一笔画问题【数据结构-图论】

    回家路上听到2个人在说:田字怎么一笔写成,并且笔划不重复. 田 我回家想了许久,觉得无论如何走正常的途径肯定是不行的,投机取巧脑筋急转弯的我不讨论. 那么是否可以找到数学定理? 其实就是欧拉七桥问题: ...

  2. 资料分享:数学建模资料分享 -- 图论部分

    背景 今天上午,在教六第一阶梯教室为数学建模俱乐部的同学们分享了有关图论的基本知识和应用. 课后,为同学们留了一个算法实现的小练习,大家可以先做一下.在本图文的末尾处,我把上课的资料以及代码分享出来, ...

  3. 各种图论模型及其解答(转)

    原文转自Jelline blog http://blog.chinaunix.net/uid-9112803-id-411340.html 摘要: 本文用另一种思路重新组织<图论及其应用> ...

  4. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

  5. 图论刷水题记录(一)(最短路-----dijkstra算法)

    最近实在不知道干些什么,感觉自己除了水题什么都不会做,算了去刷一刷图论的水题吧本来想合起来一起发,想了想太长的话以后看起来也不方便,题目所以今天晚上就先发了dij部分,由上到下由易变难. 1.POJ ...

  6. 图论分析方法gretna_基于磁共振的多模态分析对血管性认知障碍患者脑网络的研究...

    摘要:目的:1.通过对血管性认知障碍(VCI)患者的结构相及静息态磁共振数据进行采集和分析,运用图论的分析方法来研究VCI患者与正常者之间的脑网络差异,并将脑网络拓扑属性与临床认知评分进行相关性分析, ...

  7. 【图论专题】图的存储与遍历(最小环、所有环的大小)

    整理的算法模板合集: ACM模板 目录 Part 8.1 图的存储与遍历 P2661 信息传递(最小环) P2921 Trick or Treat on the Farm(求所有环的大小) 题单链接: ...

  8. 【图论专题】最小生成树的扩展应用

    整理的算法模板合集: ACM模板 最小生成树的扩展应用 能用kruskal打死不用prim kruskal是要把所有的边都遍历一遍 图论中的超级源点就比较常用,要时刻想到它 题目列表: 题目 算法 A ...

  9. 0x6A.图论 - 网络流初步

    目录 一.网络流基本概念 二.最大流 1)Edmonds−KarpEdmonds-KarpEdmonds−Karp算法 luogu P2740草地排水 Edmonds-Karp增广路,最大流模板 2) ...

最新文章

  1. Java最全的思维导图汇总!速度收藏!
  2. install npm 到某个文件下执行_如何将npm安装到指定目录?
  3. 【远程沟通】“云答辩”“云招聘”双管齐下,解救“最难毕业生”
  4. centos 安装git_在Centos8上安装Git的方法
  5. Python 5 运算符
  6. 自定义QListWidget实现item被hover时改变图标样式(模仿网易云音乐选项列表)(方法一)
  7. Android分贝开发
  8. 13、三维图绘制及添加文本
  9. 数学分析学习(一):映射与不等式
  10. android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导出App、支付宝AR扫码效果等源码...
  11. 机器学习学习整理(二)对数几率回归与支持向量机
  12. 转载-高仙机器人落地北京杭州深圳多个城市地铁
  13. Gerry-自定义报表组件
  14. HDU1757(矩阵快速幂+简单的矩阵构造)
  15. 猎魂觉醒服务器界面不显示角色,猎魂觉醒新人常见问题集合 新人常见问题解决_3DM手游...
  16. CAD .NET 14.1.X DWG/ DXF, PLT 自由转换- CNC
  17. android 滑动标签框架,Android实现网易严选标签栏滑动效果
  18. ListContainer教程
  19. javascript中函数参数是evt详解
  20. 1706D1 - Chopping Carrots (Easy Version)

热门文章

  1. 计算机组成原理机器码怎么求,计算机组成原理--数据格式与机器码
  2. 5个非常牛掰的资源网站 没有你搜不到的资源
  3. nc15665 maze 题解 (传送门) 广搜bfs+优先队列
  4. 使用MatrixEQTL进行cis/trans-eQTL分析
  5. NETGARE超频失败砖的拯救
  6. AlphaGo 和 ChatGPT有何相似之处? 附AlphaGo核心算法开源链接
  7. 树莓派Bullseye版本更新
  8. python requests 登录qq_Python3使用requests登录人人影视网站的方法
  9. 自动驾驶汽车需求拉动,我国车载激光雷达市场规模有望突破15亿元
  10. 2018最新IntelliJ IDEA全局内容搜索和替换教程