【裸的拓扑排序模板题】Legal or Not

题目描述

裸的拓扑排序

代码实现

//拓扑排序模板题 
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 110;

int n,m;
int ind[maxn]; //入度表示有徒弟 
vector<int> adj[maxn];

void topoSort(){
	queue<int> q;
	int cnt=0;
	for(int i=0;i<n;i++){
		if(ind[i]==0){
			q.push(i);
		}
	}
	while(!q.empty()){
		int cur = q.front();
		q.pop();
		cnt++;
		
		for(int i=0;i<adj[cur].size();i++){
			int master = adj[cur][i];
			ind[master]--;
			if(ind[master]==0){
				q.push(master);
			}
		}
	}
	if(cnt==n){
		printf("YES\n");
	}else{
		printf("NO\n");
	} 
}

int main(){
	while(scanf("%d %d",&n,&m)){
		if(n==0){
			break;
		}
		for(int i=0;i<maxn;i++){
			adj[i].clear();
		}
		fill(ind,ind+maxn,0);
		int x,y;
		for(int i=0;i<m;i++){
			scanf("%d %d",&x,&y);
			ind[x]++;
			adj[y].push_back(x);
		}
		topoSort(); 
	}	
	return 0;
}

码后反思

  1. 拓扑排序的一个重大的作用就是判断有没有环!!!通过计数有多少元素如队列来确定的。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值