有向图求拓扑
来源:互联网 发布:geekbench4 mac下载 编辑:程序博客网 时间:2024/05/16 01:16
1、问题描述
给定一个有向图,求出其拓扑排序序列。
2、算法
⑴、在有向图中选一个没有前驱的顶点且输出之(如果有多个顶点皆没有前驱,序号小的顶点先输出,如果b,d皆无前驱时,先输出b)
⑵、从图中删除该顶点和所有以它为尾的弧
重复⑴⑵两步,直到所有顶点输出为止
Input
第一行:样本顶点个数,假设为n。
第二行,n个顶点(用空格隔开)
第三行开始到n+2行:每一行是某顶点(按第二行的输入为序)与其它顶点之间是否有边,1表示有边,0表示没有边
Output
有向图拓扑排序序列(顶点之间用空格隔开)(最后一个顶点之后也留有空格)
Sample Input
5
a b c d e
0 1 0 1 1
0 0 1 0 0
0 0 0 0 1
0 0 1 0 0
0 0 0 0 0
Sample Output
a b d c e
#include <iostream>
using namespace std;
const int Max = 10;
struct Graph{
int MaxNum;
int MaxValue[Max];
int Adj[Max][Max];
bool visited[Max];
};
void initGr(Graph &G, int n){
G.MaxNum = n;
int i, j;
for(i = 0; i < G.MaxNum; i++){
for(j = 0; j < G.MaxNum; j++)
cin>>G.Adj[i][j];
}
for(i = 0; i< G.MaxNum; i++){
G.MaxValue[i] = i;
G.visited[i] = false;
}
}
void Change(Graph G,char b[]){
int i, j, k, m;
for(m = 0; m <G.MaxNum; m++){
for(i = 0; i < G.MaxNum; i++){
for(j = 0; j < G.MaxNum; j++){
if(G.Adj[j][i])
break;
}
if(j == G.MaxNum && !G.visited[i])
break;
}
cout<<b[i]<<" ";
for(k = 0; k <G.MaxNum; k++)
G.Adj[i][k] = 0;
G.visited[i] = true;
}
cout<<endl;
}
int main()
{
int t, n, i;
char *a;
Graph G[1];
//freopen("123.txt", "r", stdin);
cin>>n;
a = new char[n+1];
for(i = 0;i < n;i++)
cin>>a[i];
initGr(G[0], n);
Change(G[0],a);
return 0;
}
- 有向图求拓扑
- 求一个有向图G的拓扑序列
- 有向图--拓扑排序
- LeetCode 207. Course Schedule(拓扑排序-求有向图中是否存在环)
- LeetCode 210. Course Schedule II(拓扑排序-求有向图中是否存在环)
- 有向图的拓扑有向序列
- 有向图的拓扑排序
- 有向图的拓扑排序
- C#有向图拓扑排序
- 有向图的拓扑排序C++
- 图论-有向图的拓扑排序
- 有向图的拓扑排序
- 有向图的拓扑排序~TopologicalSort
- 有向图的拓扑排序
- 有向图的拓扑排序
- 拓扑法判断有向图回路
- 有向图与拓扑排序
- 有向图 拓扑排序topoLogicalSort
- 先根建树中序遍历
- thinkPHP 输出及其模板调用(三)
- 黑马程序员——IOS学习三:Objective-C的扩展OOP,类别,内存管理等——黑马 ios 技术博客
- sql 查询何时何人删除何条记录的存储过程
- BI资料地址
- 有向图求拓扑
- PHP队列实现
- struts2 使用通配符
- QML模型与列表
- tableView视图列表3: 把解析到的XML数据显示在TableView上
- ReactiveCocoa与Functional Reactive Programming
- virtualbox 升级到4.3.20导致centos 5.3无法使用
- javascript中的urlencode
- UniCode 下 CString 转 char* 的方法