北邮通信网编程作业Word文档下载推荐.docx
- 文档编号:21558643
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:14
- 大小:253.31KB
北邮通信网编程作业Word文档下载推荐.docx
《北邮通信网编程作业Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北邮通信网编程作业Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
24.cout<
25.if(k==y-1)
26.{
27.cout<
28.}
29.}
30.}
31.
32.}
33.
34.voidmain()
35.{
36.intV;
//V为图中顶点数
37.cout<
请输入图中矩阵顶点个数:
"
38.cin>
>
V;
39.cout<
生成的图中顶点个数为:
V<
40.
41.float**w;
//w为一个二维float数组,储存权值
42.w=newfloat*[V];
//创建行指针
43.for(inti=0;
i<
i++)
44.{
45.w[i]=newfloat[V];
46.}
47.
48.ints=0;
//用于检测矩阵是否输入正确
49.do
50.{
51.cout<
<
请输入距离矩阵(无边用100代替):
52.for(intm=0;
m++)//距离矩阵初始化
53.{
54.for(intk=0;
55.{
56.cin>
w[m][k];
57.}
58.}
59.cout<
距离矩阵如下:
60.showMatrix(w,V);
61.
62.cout<
上述距离矩阵输入正确按1,重新输入按0"
63.cin>
s;
64.
65.}while(s==0);
//正确输入初始化距离矩阵
66.
67.int**r;
//r为一个二维int数组,储存路由
68.r=newint*[V];
//创建行指针
69.for(inti=0;
70.{
71.r[i]=newint[V];
72.}
73.for(intm=0;
m++)//路由矩阵初始化
74.{
75.for(intk=0;
76.{
77.if(w[m][k]==0)
78.r[m][k]=0;
79.else
80.r[m][k]=k+1;
81.}
82.}
83.cout<
初始化的路由矩阵为"
84.showMatrix(r,V);
85.
86.
87.//初始化完成,下面开始进行Floyd算法迭代
88.for(intl=0;
l<
l++)
89.{
90.for(intm=0;
91.{
92.for(intk=0;
93.{
94.if(w[m][l]+w[l][k]<
w[m][k])
95.{
96.w[m][k]=w[m][l]+w[l][k];
97.r[m][k]=r[m][l];
98.}
99.
100.}
101.}
102.cout<
第"
l+1<
次迭代结果中w为"
103.showMatrix(w,V);
104.cout<
次迭代结果中r为"
105.showMatrix(r,V);
106.
107.}
108.cout<
Floyd迭代完成。
109.
110.intmidpoint=0;
//代表中点的顶点标号
111.intcentral=0;
//代表中心的顶点标号
112.float*max=newfloat[V];
//代表每个端点i的max{w[i][j]}
113.float*sum=newfloat[V];
//代表每个端点i的w[i][j]之和
114.for(intm=0;
m++)//初始化动态数组
115.{
116.sum[m]=0;
117.max[m]=0;
118.}
119.
120.for(intm=0;
m<
V;
m++)
121.{
122.for(intk=0;
k<
123.{
124.sum[m]=sum[m]+w[m][k];
//记录以m为端点的边权值之和
125.if(w[m][k]>
max[m])
126.max[m]=w[m][k];
//记录以m为端点的边的最大权值
127.}
128.
129.}
130.cout<
各端点的最大边权值分别为:
131.for(intm=0;
132.{
133.cout<
max[m]<
134.}
135.cout<
各端点的边权值之和分别为:
136.for(intm=0;
137.{
138.cout<
sum[m]<
139.}
140.
141.floatminSum=sum[0];
//以第一个顶点为最小值进行初始化
142.floatminMax=max[0];
143.for(intm=1;
144.{
145.if(sum[m]<
minSum)//顶点m边权值之和比最小值小,将m记为最小值
146.{
147.minSum=sum[m];
148.midpoint=m;
149.}
150.if(max[m]<
minMax)//顶点m最大边权值比最小值小,将m记为最小值
151.{
152.minMax=max[m];
153.central=m;
154.}
155.}
156.cout<
图的中心为V"
central+1<
,中点为V"
midpoint+1<
157.
158.cout<
进行最短路径规划输入1,不进行输入0:
159.cin>
s;
//用于判断是否进行路径规划
160.while(s==1)
161.{
162.intstart,end,middle;
163.cout<
请输入路径起点:
;
164.cin>
start;
165.cout<
请输入路径终点:
166.cin>
end;
167.cout<
从V"
start<
至V"
end<
的最短路径为:
168.<
V"
169.do
170.{
171.middle=r[start-1][end-1];
172.cout<
->
middle;
173.start=middle;
174.}while(middle!
=end);
175.cout<
继续进行最短路径规划输入1,不进行输入0:
176.cin>
//用于判断是否进行路径规划
177.}
178.delete[]w,r,sum,max;
179.}
实验测试结果如下:
2.图的连通性判断
1.#include<
3.
4.voidDFS(int**c,intm,intn,int*b)
5.//c为矩阵,m为遍历起点,n为顶点个数,b为顶点遍历情况
7.for(intx=0;
x<
n;
x++)
8.{
9.if(c[m][x]==1)
10.{
11.if(b[x]==0)
12.{
13.cout<
x+1;
//输出遍历端点号
14.b[x]=1;
//端点设为已遍历
15.DFS(c,x,n,b);
16.}
17.}
18.}
19.}
20.
21.voidmain()
22.{
23.intV;
24.cout<
请输入顶点个数:
25.cin>
26.int**C;
27.C=newint*[V];
//二维动态数组存储邻接矩阵
28.for(inti=0;
29.{
30.C[i]=newint[V];
31.}
32.ints=0;
33.do
34.{
35.cout<
请输入邻接矩阵(无边为0,有边为1):
36.for(intm=0;
m++)//邻接矩阵初始化
37.{
38.for(intk=0;
39.{
40.cin>
C[m][k];
41.}
42.}
43.cout<
邻接矩阵如下:
44.for(intm=0;
45.{
46.for(intk=0;
47.{
48.cout<
C[m][k]<
49.if(k==V-1)
50.{
51.cout<
52.}
53.}
54.}
55.
56.cout<
上述邻接矩阵输入正确按1,重新输入按0"
57.cin>
58.
59.}while(s==0);
//正确输入初始化距离矩阵
60.
61.int*a=newint[V];
//初始化各顶点遍历情况
62.for(inti=0;
i++)
63.{
64.a[i]=0;
65.}
67.intU=0;
//从第U个节点开始遍历
68.cout<
\n请输入从开始遍历的顶点号:
69.cin>
U;
70.inti=U-1;
//第U个节点对应a[U-1]
71.a[i]=1;
//标记第U个节点为已遍历
72.cout<
\n遍历的次序为:
\nV"
i+1;
73.
74.DFS(C,i,V,a);
75.
76.cout<
以第一个顶点为起点进行遍历,各节点遍历情况为:
(被遍历为1,不被遍历为0)"
77.<
78.intsum=0;
79.for(intx=0;
80.{
81.cout<
a[x]<
82.sum=sum+a[x];
83.}
84.if(sum!
=V)
85.cout<
\n存在不被遍历的点,该图不连通"
86.else
87.cout<
所有点均被遍历,该图为连通图"
\n\n"
88.
89.delete[]C,a;
90.}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信网 编程 作业