有向无环图的几种判环方法:
1)利用dfs法判断:
若一个结点从未被访问过则为-1;若该结点被访问了,并且其孩子结点还在访问状态定位0;若该节点访问结束了并且其孩子访问完了状态为1;当该结点在访问过程中遇到状态为0的点说明有环;
#include
#include
using namespace std;
vector in[1200];
int color[1200];
bool flag = false;
int c = 0;
void dfs(int x) {
if (flag)
{
return;
}
color[x] = 0;
for (int i = 0; i < in[x].size(); i++)
{
if (color[in[x][i]]==-1)
{
dfs(in[x][i]);
}
else if (color[in[x][i]]==0)
{
flag = true;
return;
}
}
color[x] = 1;
}
int main() {
memset(color, -1, sizeof(color));
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int u, v;
cin >> u >> v;
in[u].push_back(v);
}
flag = false;
dfs(1);
if (flag)
{
cout << “OK”;
}
else
{
cout << “NO”;
}
system(“pause”);
return 0;
}