判断无向图是否有环(求图传递闭包)

来源:互联网 发布:淘宝属于腾讯软件吗 编辑:程序博客网 时间:2024/06/06 09:21
/*判断无向图是否有环(求图传递闭包)*/#include <iostream>#include <stdlib.h>#include <vector>#include <memory.h>using namespace std;int n,m;int matrix[1001][1001];inline bool noLoop(){              //求出图的传递闭包    // 例如 i->k,i可以到达k,则就在i列中,找出可以到达i的j,扫描k列所有行即可     for(int i=1; i<=n; i++)      for(int k=1; k<=n; k++)          if(matrix[i][k])          {             //扫描k列所有的行              for(int j=1; j<=n; j++)               if(matrix[j][i])  //如果存在j可达i,则说明j也可到k 则令其为1                 matrix[j][k] =1;                       }                      //找完闭包后,要判断是否形成回路闭包,只需要判断是否存在节点i可以连通到自身    for(int i=1; i<=n ; i++)       if(matrix[i][i])         return false;     return true;}int main(){    while(cin >> n >> m)    {       //memset(visit, 0, sizeof(visit));       memset(matrix, 0, sizeof(matrix));       for(int i=1; i<= m; i++)       {          int start, end;          cin >> start >> end;          matrix[start][end] = 1;          matrix[end][start] =1;              }            if(!noLoop())      {         cout << "no" << endl;            }          else         cout << "yes" << endl;                   }       system("pause");    return 0;}

原创粉丝点击