데이터 구조 - kruskal 알고리즘 - 최소 생 성 트 리
16444 단어 최소 생 성 트 리
원본 코드 드 리 기:
1 #include"iostream"
2 using namespace std;
3
4 #define MAX 1000
5
6 typedef struct ArcCell
7 {
8 double adj;
9 int *info;
10 }ArcCell,adjmatrix[100][100];//adj
11
12 typedef struct
13 {
14 char vexs[100];
15 adjmatrix arcs;
16 int vexnum,arcnum;//
17 }MGraph;//
18
19 typedef struct Node
20 {//
21 char start;
22 char end;
23 double value;
24 }Node,Dgevalue[100];
25
26 int locatevex(MGraph G,char ch)
27 {// ch
28 int k;
29 for(int i=0;i<G.vexnum;i++)
30 {
31 if(G.vexs[i]==ch)
32 k=i;
33 }
34 return k;
35 }
36
37 int creatmatrix(MGraph &G,Dgevalue &dgevalue)
38 {//
39 int i,j,k;
40 cout<<" "<<endl;
41 cin>>G.vexnum>>G.arcnum;
42
43 for(i=0;i<G.vexnum;i++)//
44 cin>>G.vexs[i];
45
46 for(i=0;i<G.vexnum;i++)
47 {// MAX
48 for(j=0;j<G.vexnum;j++)
49 {
50 G.arcs[i][j].adj=MAX;
51 }
52 }
53 cout<<" "<<endl;
54 for(k=0;k<G.arcnum;k++)
55 {// value
56 cin>>dgevalue[k].start>>dgevalue[k].end>>dgevalue[k].value;
57 i=locatevex(G,dgevalue[k].start);
58 j=locatevex(G,dgevalue[k].end);
59 G.arcs[i][j].adj=dgevalue[k].value;
60 G.arcs[j][i].adj=G.arcs[i][j].adj;
61 }
62 return 0;
63 }
64
65 void sort(MGraph G,Dgevalue &dgevalue)
66 {//
67 char p1,p2;
68 int i,j,temp;
69 for(i=0;i<G.arcnum;i++)
70 {//
71 for(j=i;j<G.arcnum;j++)
72 {
73 if(dgevalue[i].value>dgevalue[j].value)
74 {
75 temp=dgevalue[i].value;
76 dgevalue[i].value=dgevalue[j].value;
77 dgevalue[j].value=temp;
78
79 p1=dgevalue[i].start;
80 dgevalue[i].start=dgevalue[j].start;
81 dgevalue[j].start=p1;
82
83 p2=dgevalue[i].end;
84 dgevalue[i].end=dgevalue[j].end;
85 dgevalue[j].end=p2;
86 }
87 }
88 }
89 }
90
91 void creatminitree_kruskal(MGraph G,Dgevalue &dgevalue)
92 {//kruskal
93 int i,j,p[100];
94 char pa,pb;
95 for(i=0;i<G.vexnum;i++)
96 p[i]=i;
97
98 sort(G,dgevalue);
99 cout<<endl;
100 for(i=0;i<G.arcnum;i++)
101 {
102 pa=p[locatevex(G,dgevalue[i].start)];
103 pb=p[locatevex(G,dgevalue[i].end)];
104
105 if(pa!=pb)
106 { // a、b
107 cout<<dgevalue[i].start<<" "<<dgevalue[i].end<<" "<<dgevalue[i].value<<endl;
108
109 for(j=0;j<G.vexnum;j++)
110 {// a、b
111 if(p[j]==pb)
112 p[j]=pa;
113
114 }
115 }
116 }
117 }
118
119 int main()
120 {
121 char u;
122 MGraph G;
123 Dgevalue dgevalue;
124 creatmatrix(G,dgevalue);
125 cout<<" kruskal ";
126 creatminitree_kruskal(G,dgevalue);
127
128 return 0;
129 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDU 1875 는 최소 생 성 트 리 입 니 다.그들 이 다른 작은 섬 에 가 고 싶 을 때 작은 배 를 저어 이 루어 져 야 합 니 다.현재 정 부 는 백도 호 를 대대적으로 발전 시 키 기로 결정 했다. 조건 에 맞 는 다 는 것 은 작은 섬 2 곳 사이 의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.