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

📄 pku 2890 matrix multiplication(传递闭包).cpp

📁 杭电acm解题报告2001---2099.
💻 CPP
字号:
/*pku 2890 matrix multiplication */
//传递闭包
//图形算法
#include<stdio.h>
#include<string.h>
#define N 1050
int map[N][100],len[N];
int pre[N],tc[N][N];
int n,m;

void tcdfs(int u,int p)
{
	int ii;
	int temp;
	
	for(ii=1;ii<=len[u];ii++)
	{
		temp=map[u][ii];
		if(pre[temp]) continue;
		pre[temp]=1;
		tc[p][temp]=1;
		tcdfs(temp,p);	
	}
}

void dagtc()
{
	int ii,jj;
	int num;
	
	memset(tc,0,sizeof(tc));
	for(ii=1;ii<=n;ii++)
	{
		 memset(pre,0,sizeof(pre));
		 pre[ii]=1;
		 tcdfs(ii,ii);	 
	}

	for(ii=1,num=0;ii<=n;ii++)
		for(jj=1;jj<=n;jj++)
		{
			if(ii==jj) tc[ii][ii]=1;
			if(tc[ii][jj]) num++;		
		}
			
	printf("%d\n",num);
}

int main()
{
	int ii;
	int a,b,temp;
	while(scanf("%d %d",&n,&m)!=EOF)
	{
		memset(len,0,sizeof(len));
		for(ii=1;ii<=m;ii++)
		{
			scanf("%d %d",&a,&b);
			a++,b++;
			len[a]++;
			map[a][len[a]]=b;
		}
		
		dagtc();
	}
	return 1;
}
/*
3 4
1 2
2 1
0 1
0 2
5 2
1 2
2 3
*/

⌨️ 快捷键说明

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