算法提高 士兵排队问题
2017-05-08 20:46
253 查看
算法提高 士兵排队问题
时间限制:1.0s 内存限制:256.0MB
提交此题
试题
有N个士兵(1≤N≤26),编号依次为A,B,C,…,队列训练时,指挥官要把一些士兵从高到矮一次排成一行,但现在指挥官不能直接获得每个人的身高信息,只能获得“P1比P2高”这样的比较结果(P1、P2∈A,B,C,…,Z,记为 P1>P2),如”A>B”表示A比B高。
请编一程序,根据所得到的比较结果求出一种符合条件的排队方案。
(注:比较结果中没有涉及的士兵不参加排队)
输入要求
比较结果从文本文件中读入(文件由键盘输入),每个比较结果在文本文件中占一行。
输出要求
若输入数据无解,打印“No Answer!”信息,否则从高到矮一次输出每一个士兵的编号,中间无分割符,并把结果写入文本文件中,文件由键盘输入:
样例输入
A>B
B>D
F>D
样例输出
AFBD
根据提示,使用拓扑排序,借助队列实现。
关键在于不断地该更新每个点的入读,根据入读是否为0,进行排序。
时间限制:1.0s 内存限制:256.0MB
提交此题
试题
有N个士兵(1≤N≤26),编号依次为A,B,C,…,队列训练时,指挥官要把一些士兵从高到矮一次排成一行,但现在指挥官不能直接获得每个人的身高信息,只能获得“P1比P2高”这样的比较结果(P1、P2∈A,B,C,…,Z,记为 P1>P2),如”A>B”表示A比B高。
请编一程序,根据所得到的比较结果求出一种符合条件的排队方案。
(注:比较结果中没有涉及的士兵不参加排队)
输入要求
比较结果从文本文件中读入(文件由键盘输入),每个比较结果在文本文件中占一行。
输出要求
若输入数据无解,打印“No Answer!”信息,否则从高到矮一次输出每一个士兵的编号,中间无分割符,并把结果写入文本文件中,文件由键盘输入:
样例输入
A>B
B>D
F>D
样例输出
AFBD
根据提示,使用拓扑排序,借助队列实现。
关键在于不断地该更新每个点的入读,根据入读是否为0,进行排序。
#include<iostream> #include<cstdio> #include<queue> using namespace std; int dep[26][26];//存储士兵之间身高关系,用图论知识 int in[26];//计算每个数的入度 int visit[26];//判断比较结果中知否有此人 char ans[26];//存储结果 int index=0; void fun() { queue<int> q; int n=0; for (int i=0;i<26;i++) { if (visit[i]==1)//计算总共出现了多少人 n++; if (visit[i]==1&&in[i]==0)//如果入度为0,则进队列 q.push(i); } while(!q.empty()) { int c=q.front();//队列首元素出列 q.pop(); n--;//队列人数减少 ans[index++]=c+'A';//加入结果数组中 for (int i=0;i<26;i++) { if (visit[i]==1&&dep[c][i])// { in[i]--; if (in[i]==0)//如果入读为0,入队列 { q.push(i); } } } } if (n!=0)//如果出现的总人数不等于出队列的人数,说明存在环或者子连通图 { cout<<"No Answer!"<<endl; } else { for (int i=0;i<index;i++) { cout<<ans[i]; } } } int main() { char a,b,op; int x,y; while(scanf("%c%c%c",&a,&op,&b)!=EOF) { char ch = getchar(); x=a-'A'; y=b-'A'; visit[x]=visit[y]=1; if (dep[x][y]) continue; dep[x][y]=1; in[y]++; } fun(); return 0; }
相关文章推荐
- 算法提高 士兵排队问题
- 蓝桥杯—算法提高—士兵排队问题
- 算法提高 士兵排队问题
- 算法提高 士兵排队问题
- 算法提高 士兵排队问题(拓扑排序的队列解法)
- 算法提高 排队打水问题
- 蓝桥杯 ADV-148算法提高 排队打水问题(贪心)
- 算法提高 排队打水问题
- 算法提高 排队打水问题
- 算法提高 排队打水问题 无聊刷个水题
- 算法提高 打水问题
- 蓝桥杯 ADV-104算法提高 打水问题
- 蓝桥杯 算法提高 学霸的迷宫 经典BFS问题
- 蓝桥杯算法提高 打水问题
- ADV-104-算法提高-打水问题
- 拓扑-士兵排队问题3
- 贪心算法-排队问题-JAVA
- 蓝桥杯 算法提高 金明的预算方案 有依赖的背包问题
- 蓝桥杯_算法提高_道路与航道(典型的SPFA算法问题)
- DAG图与拓扑排序 (士兵排队问题)