#define MAXN 110
void search(int n,intmat[][MAXN],int* dfn,int* low,int now,int& ret,int* key,int& cnt,introot,int& rd,int* bb){
int i;
dfn[now]=low[now]=++cnt;
for(i=0;i<n;i++)
if(mat[now][i]){
if(!dfn[i]){
search(n,mat,dfn,low,i,ret,key,cnt,root,rd,bb);
if(low[i]<low[now])
low[now]=low[i];
if(low[i]>=dfn[now]){
if(now!=root&&!bb[now])
key[ret++]=now,bb[now]=1;
elseif(now==root)
rd++;
}
}
elseif (dfn[i]<low[now])
low[now]=dfn[i];
}
}
int key_vertex(int n,int mat[][MAXN],int* key){//进行值传递时,只要把数组名传递就好
intret=0,i,cnt,rd,dfn[MAXN],low[MAXN],bb[MAXN];
for(i=0;i<n;dfn[i++]=bb[i]=0);
for(cnt=i=0;i<n;i++)
if(!dfn[i]){
rd=0;
search(n,mat,dfn,low,i,ret,key,cnt,i,rd,bb);
if(rd>1&&!bb[i])
key[ret++]=i,bb[i]=1;
}
returnret;
}
Note:这里数组都是从0开始计数的,具体题目中可能是用1开始计数,适当调整poj1144
poj1144题啊,就是因为数组的下界问题,调了一个晚上,真想骂人了~~