⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 有向图强连通分支(dfs邻接阵形式).txt

📁 ACM资料大集合
💻 TXT
字号:
//有向图强连通分支,dfs邻接阵形式,O(n^2)
//返回分支数,id返回1..分支数的值
//传入图的大小n和邻接阵mat,不相邻点边权0
#define MAXN 100

void search(int n,int mat[][MAXN],int* dfn,int* low,int now,int& cnt,int& tag,int* id,int* st,int& sp){
	int i,j;
	dfn[st[sp++]=now]=low[now]=++cnt;
	for (i=0;i<n;i++)
		if (mat[now][i]){
			if (!dfn[i]){
				ssearch(n,mat,dfn,low,i,cnt,tag,id,st,sp);
				if (low[i]<low[now])
					low[now]=low[i];
			}
			else if (dfn[i]<dfn[now]){
				for (j=0;j<sp&&st[j]!=i;j++);
				if (j<cnt&&dfn[i]<low[now])
					low[now]=dfn[i];
			}
		}
	if (low[now]==dfn[now])
		for (tag++;st[sp]!=now;id[st[--sp]]=tag);
}

int find_components(int n,int mat[][MAXN],int* id){
	int ret=0,i,cnt,sp,st[MAXN],dfn[MAXN],low[MAXN];
	for (i=0;i<n;dfn[i++]=0);
	for (sp=cnt=i=0;i<n;i++)
		if (!dfn[i])
			search(n,mat,dfn,low,i,cnt,ret,id,st,sp);
	return ret;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -