#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題啊,就是因爲數組的下界問題,調了一個晚上,真想罵人了~~