离散数学实验四

A - 补图

Description

题目给出一个无向图,求该无向图关于完全图的相对补图,并求该补图的最大度和最小度。方便起见,用邻接矩阵表示该无向图。无向图的节点数不少于2并且不超过500.

 

Input

多组输入,每组输入第一行是无向图中节点的数量即邻接矩阵的行列数n。接下来n行n列为该图的邻接矩阵。

 

Output

每组数据,首先输出n行n列表示补图的邻接矩阵。接下来一行两个用空格分隔的整数,分别代表补图的最大度和最小度。

 

Sample

Input

4

0 0 1 1

0 0 0 1

1 0 0 0

1 1 0 0

Output

0 1 0 0

1 0 1 0

0 1 0 1

0 0 1 0

2 1

参考代码:

#include int main(){int i,j,n,max,min,f,a[501][501];while(scanf("%d",&n)!=EOF){max=0;min=501;for(i=0;imax)max=f;if(f

 

B - 指定长度路径数

Description

题目给出一个有n个节点的有向图,求该有向图中长度为k的路径条数。方便起见,节点编号为1,2,…,n,用邻接矩阵表示该有向图。该有向图的节点数不少于2并且不超过500.

例如包含两个节点的有向图,图中有两条边1 → 2 ,2 → 1 。

长度为1的路径有两条:1 → 2 和 2 →1 ;

长度为2的路径有两条:1 → 2 → 1和2 → 1 → 2 ;

偷偷告诉你也无妨,其实这个图无论k取值多少 ( k > 0 ),长度为k的路径都是2条。

Input

多组输入,每组输入第一行是有向图中节点的数量即邻接矩阵的行列数n。接下来n行n列为该图的邻接矩阵。接下来一行是一个整数k.k小于30.

Output

输出一个整数,即为图中长度为k的路径的条数。

Sample

Input

3

0 1 0

0 0 1

0 0 0

2

Output

1

参考代码:

#includeint e[500][500],c[500][500],b[500][500];int main(){int n,i,j,k,sum,p,q;while(scanf("%d",&n)!=EOF){memset(e,0,sizeof(e));memset(c,0,sizeof(c));for(i=1;i<=n;i++){for(j=1;j<=n;j++){scanf("%d",&e[i][j]);c[i][j]=e[i][j];}}scanf("%d",&k);for(p=1;p

 C - 建图

Description

编程使得程序可以接受一个图的点边作为输入,然后显示出这个图。

Input

多组测试数据,对于每组测试数据,第一行输入正整数n(1 <= n <= 1000)和m,之后m行输入正整数x、y,表示在点x和点y之间存在有向边相连。

Output

对于每组测试数据,输出图的关系矩阵。

Sample

Input

4 5

1 1

2 2

2 4

3 3

4 4

Output

1 0 0 0

0 1 0 1

0 0 1 0

0 0 0 1

参考代码:

#include int main(){int n,m,x,y,i,j,a[1001][1001];while(scanf("%d%d",&n,&m)!=EOF){memset(a,0,sizeof(a));while(m--){scanf("%d%d",&x,&y);a[x][y]=1;}for(i=1;i<=n;i++){for(j=1;j<=n-1;j++){printf("%d ",a[i][j]);}printf("%d\n",a[i][j]);}}return 0;}

D - 最小生成树

Description

在一个无向图中,求最小生成树。

Input

多组测试数据,对于每组测试数据,第1行输入正整数n(1 <= n <= 1000)、m,表示n个顶点(编号从1开始)和m条边。之后m行每行输入u(1 <= u <= n)、v(1 <= v <= n)、w(1 <= w <= 100),表示在顶点u和顶点v之间存在无向边,且权值为w。

Output

对于每组测试数据,若存在最小生成树则输出最小生成树的权值和,若不存在最小生成树则输出-1。

Sample

Input

3 7

1 2 19

2 3 11

3 1 7

1 3 5

2 3 89

3 1 91

1 2 32

Output

16

参考代码:

C++:

#include #include using namespace std;int f[1200];struct node{int u,v,w;}e[120000];int cmp(struct node a,struct node b){return a.w

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章