洛谷1347 排序

题目:排序


思路:

拓扑排序。

每一次输入都根据大小关系建图。

如果此图有环,就是矛盾。

如果此图无环且每次拓扑排序都只能找到一个入度为0的点,就说明可以确定顺序。

否则不能确定。


注意:

当输入x

也就是说当拓扑排序找到两个及以上入度为0的点时,不能直接return,而要先打上标记,当已经确定没有矛盾十,才能输出不能判断。


代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int n,m;

int a[30][30]= {0};
int g[30][30]= {0};

int top(int id) {
	int b[30]= {0};

	vector ord;
	
	bool flag=true;
	while(true) {
		vector c;
		for(int i=1; i<=n; i++) {
			if(!g[i][0]&&!b[i]) {
				ord.push_back(char(i+'A'-1));
				c.push_back(i);
				b[i]=true;
			}
		}

		if(c.size()>1) flag=false;	//不能写 return 0; 
		if(!c.size()) break;

		for(int i=0; i


你可能感兴趣的:(图论)