忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2964 | 回复: 5

从链描述转换为链 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
发表于 2011-02-21 12:26 |显示全部楼层
文件 a.txt 是个简单链的描述。
只有两列,每列的意思是表示相临两个链节的次序。
00 表示链节结束。
所谓简单链,就是一个链节不会出现在两个链中。
希望用程序把每个链按次序列到一行中,
这样就可以知道有几个链,以及每个链中链的次序
a.txt 文件的内容下:
01      00
02      03
03      0b
04      0c
05      15
06      10
07      11
08      02
09      13
0a      0f
0b      14
0c      07
0d      08
0e      0d
0f      06
10      09
11      05
12      00
13      12
14      00
15      0a
16      0e
期待的结果如下:
04 0c 07 11 05 15 0a 0f 06 10 09 13 12
16 0e 0d 08 02 03 0b 14
只是思考题,不要求结果。

论坛徽章:
0
发表于 2011-02-21 13:34 |显示全部楼层
  1. awk 'BEGIN{idx=0;}$2==0{b[idx]=$1;idx++;next}{a[$2]=$1;}END{for(i=0;i<idx;i++){j=substr(b[i],1,2);while(j in a){b[i]=a[j]" "b[i];delete a[j];j=substr(b[i],1,2);}print b[i]}}' file
复制代码

论坛徽章:
0
发表于 2011-02-21 13:35 |显示全部楼层
但是 有可能有多种答案  上面只是输出其中一种

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
发表于 2011-02-21 13:56 |显示全部楼层
awk 'function getnode(a,b,c){for(j in a){if(b[j]==c){return getnode(a,b,a[j])" "c}}return c}{a[NR]=$1;b[NR]=$2}END{for(i in b){if(b[i]=="00"){c[i]=getnode(a,b,a[i])}}for(i in c){print c[i]}}' file

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-02-21 16:16 |显示全部楼层
01      00
不是一条吗?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-02-21 16:27 |显示全部楼层
不过这个题目还可以.

  1. awk 'NF!=2{next}$2=="00"{first[$1]=1;next}{a[$2]=$1}END{for(i in first){out=i;c=i;while(a[c]!=""){c=a[c];out=c" "out;}print out;}}' urfile
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP