拓扑排序

简介: 拓扑排序

拓扑排序

通常用来判断途中图中有没有环

模板

#include<iostream>
#include<string.h>
using namespace std;
#define MAXN 105
int G[MAXN][MAXN];
int in[MAXN];
int ans[MAXN];
int n, m;
void ac() {
  for(int i = 0; i < n; i++) {
    for(int j = 0; j < n; j++) {
      if(G[i][j]==1) {
        in[j]++;//计算每个点的入度
      }
    }
  }//计算入度
  for(int i = 0; i < n; i++) {
    int k = 0;
    while(in[k] != 0) {
      k++;
    }//找出入度为0的点
    if(k>=n){
      cout<<"NO"<<endl;
      return ;
    }
    in[k] = -1;//设置为以修改,以删除状态
    for(int j = 0; j < n; j++) {
      if(G[k][j]==1) {
        in[j]--;//将以该点出发的别的点的入读全部减1
      }
    }
  }
  int f=0; 
  for(int j =0; j < n; j++) {
    if(in[j]!=-1) {//如果没有度数为0的点,但是还没被访问过,说明矛盾了
      f=1;
    }
  }
  if(f==1)
    cout<<"NO"<<endl;
  else
    cout<<"YES"<<endl; 
}
void init() {
  memset(in,0,sizeof(in));
  memset(G,0,sizeof(G));
}
int main() {
  while(cin>>n>>m) {
    if(n==0)break;
    init();
    for(int i = 0; i < m; i++) {
      int x,y;
      cin>>x>>y;
      G[x][y] = 1;
    }
    ac();
  }
  return 0;
}



目录
相关文章
|
4月前
|
NoSQL 容器 消息中间件
图、图的遍历及图的拓扑排序
图、图的遍历及图的拓扑排序
|
5月前
|
存储 人工智能 算法
【算法总结】拓扑排序
【算法总结】拓扑排序
30 0
|
8月前
我们来看看拓扑排序
我们来看看拓扑排序
|
10月前
|
搜索推荐
|
12月前
|
存储
拓扑排序
拓扑排序
|
人工智能 自然语言处理 搜索推荐
拓扑排序算法
拓扑排序算法
90 0
|
存储 算法 Java
【数据结构与算法】有向图的拓扑排序
【数据结构与算法】有向图的拓扑排序
150 1
【数据结构与算法】有向图的拓扑排序
拓扑排序(邻接表实现)
拓扑排序(邻接表实现)
140 0
拓扑排序(邻接表实现)
|
机器学习/深度学习 存储
图的遍历 无向图深搜 宽搜
图的遍历 无向图深搜 宽搜
图的遍历 无向图深搜 宽搜
|
搜索推荐 算法