拓扑排序代码

#include <iostream>
using namespace std;
int map[104][104];
int n;
bool flag[104];
void update(int x)
{
	for(int i=0;i<n;i++)
		map[x][i]=0;
}
bool Tsort()
{
	for(int i=0;i<n;i++)
	{
		bool ff=false;//判断改图是否为连通图
		for(int j=0;j<n;j++)
		{
			if(flag[j])
				continue;
			int sign=1;
			for(int k=0;k<n;k++)
				if(map[k][j])
				{
					sign=0;
					break;
				}
				if(sign)
				{
					flag[j]=true;
					update(j);
					ff=true;
					break;
				}
		}
		if(!ff)
			return false;
	}
	for(int i=0;i<n;i++)//判断该是否存在回路(这个判断如果去掉也正确)
	{
		if(!flag[i])
			return false;
	}
	return true;
}
int main()
{
	int m,x,y;
	while(scanf("%d%d",&n,&m)&&n!=0)
	{
		memset(map,0,sizeof(map));
		memset(flag,false,sizeof(flag));
		for(int i=0;i<m;i++)
		{
			scanf("%d%d",&x,&y);
			map[x][y]=1;
		}
		if(Tsort())
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;
}

阅读更多
文章标签: ini include
下一篇rmq算法模板
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭