/home/a/j/nomad2:cat cut.CPP
#include <iostream>
using namespace std;
const int V = 7;
int edge[V][V], anc[V], pre[V], vis[V], deg[V];
void dfs(int cur, int father, int dep, int n)
{
int cnt = 0;
vis[cur] = 1;
pre[cur] = anc[cur] = dep;
for(int i = 0; i < V; i++)
{
if(!edge[cur][i])
{
continue;
}
if(i != father && 1 == vis[i])
{
if (pre[i] < anc[cur])
{
anc[cur] = pre[i];
}
}
if(vis[i] == 0)
{
dfs(i, cur, dep + 1, n);
cnt++;
if(anc[i] < anc[cur])
{
anc[cur] = anc[i];
}
if((cur == 0 && cnt > 1) || (cnt != 0 && anc[i] >= pre[cur]))
{
deg[cur]++;
}
}
}
vis[cur] = 2;
}
void input()
{
int v;
for(int i = 0; i < V; i++)
{
for(int j = 0; j < V; j++)
{
cin >> v;
edge[i][j] = v;
}
}
}
void init()
{
}
void display()
{
for(int i = 0; i < V; i++)
{
cout << deg[i] << " ";
}
cout << endl;
}
int main()
{
input();
dfs(0, -1, 1, V);
display();
}
测试如下,
/home/a/j/nomad2:cat input
0 1 0 1 0 0 0
1 0 1 0 0 0 0
0 1 0 1 1 0 0
1 0 1 0 0 0 0
0 0 1 0 0 1 1
0 0 0 0 1 0 1
0 0 0 0 1 1 0
/home/a/j/nomad2:cat input|./a.out
1 0 1 0 1 0 0