📄 primdlg.cpp
字号:
G.vexs[7]=m_v8;
G.vexs[8]=m_v9;
G.vexs[9]=m_v10;
for(int i=0;i<10;i++) //初始化各条边上的权值为最大值
for(int j=0;j<10;j++)
G.arcs[i][j].adj=MAX;
CString str,str1,str2,str3,str4,str5,str6,str7,str8,str9,str10;
str1.Format("%d",G.vexs[0]);
str2.Format("%d",G.vexs[1]);
str3.Format("%d",G.vexs[2]);
str4.Format("%d",G.vexs[3]);
str5.Format("%d",G.vexs[4]);
str6.Format("%d",G.vexs[5]);
str7.Format("%d",G.vexs[6]);
str8.Format("%d",G.vexs[7]);
str9.Format("%d",G.vexs[8]);
str10.Format("%d",G.vexs[9]);
str=str1+" "+str2+" "+str3+" "+str4+" "+str5+"\r\n"+str6+" "+str7+" "+str8+" "+
str9+" "+str10;
if(G.vexs[0]==0||G.vexs[1]==0||G.vexs[2]==0||G.vexs[3]==0||G.vexs[4]==0||
G.vexs[5]==0||G.vexs[6]==0||G.vexs[7]==0||G.vexs[8]==0||G.vexs[9]==0)
{CString a;
a.Format("您还未输入完毕10个房间号码!请继续输入");
SetDlgItemText(IDC_SHOW,a);
}
else SetDlgItemText(IDC_SHOW,str);
}
void CPrimDlg::OnEnter()
{
UpdateData(true);
CString a;
vex tree;
int num=0;
MGraph G;
G.vexs[0]=m_v1;
G.vexs[1]=m_v2;
G.vexs[2]=m_v3;
G.vexs[3]=m_v4;
G.vexs[4]=m_v5;
G.vexs[5]=m_v6;
G.vexs[6]=m_v7;
G.vexs[7]=m_v8;
G.vexs[8]=m_v9;
G.vexs[9]=m_v10;
for(int m=0;m<10 ;m++) //初始化各条边上的权值为最大值
for(int n=0;n<10;n++)
G.arcs[m][n].adj=MAX;
int i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15,i16,i17,i18,i19,i20,
j1,j2,j3,j4,j5,j6,j7,j8,j9,j10,j11,j12,j13,j14,j15,j16,j17,j18,j19,j20;
if(m_a1==0||m_a2==0||m_a3==0||m_a4==0||m_a5==0||m_a6==0||m_a7==0||m_a8==0||m_a9==0)
SetDlgItemText(IDC_SHOW,"请至少输入9组房间号码,否则您将无法完成局域网的接线!");
else{
i1=tree.LocateVex(G,m_a1);
j1=tree.LocateVex(G,m_b1);
if(i1==10||j1==10)
SetDlgItemText(IDC_SHOW,"您输入的第1组房间号码有错!");
else{
G.arcs[i1][j1].adj=m_w1;
G.arcs[j1][i1].adj=m_w1;
num++;
}
i2=tree.LocateVex(G,m_a2);
j2=tree.LocateVex(G,m_b2);
if(i2==10||j2==10)
SetDlgItemText(IDC_SHOW,"您输入的第2组房间号码有错!");
else{
G.arcs[i2][j2].adj=m_w2;
G.arcs[j2][i2].adj=m_w2;
num++; }
i3=tree.LocateVex(G,m_a3);
j3=tree.LocateVex(G,m_b3);
if(i3==10||j3==10)
SetDlgItemText(IDC_SHOW,"您输入的第3组房间号码有错!");
else{
G.arcs[i3][j3].adj=m_w3;
G.arcs[j3][i3].adj=m_w3;
num++;}
i4=tree.LocateVex(G,m_a4);
j4=tree.LocateVex(G,m_b4);
if(i4==10||j4==10)
SetDlgItemText(IDC_SHOW,"您输入的第4组房间号码有错!");
else{
G.arcs[i4][j4].adj=m_w4;
G.arcs[j4][i4].adj=m_w4;
num++;}
i5=tree.LocateVex(G,m_a5);
j5=tree.LocateVex(G,m_b5);
if(i5==10||j5==10)
SetDlgItemText(IDC_SHOW,"您输入的第5组房间号码有错!");
else{
G.arcs[i5][j5].adj=m_w5;
G.arcs[j5][i5].adj=m_w5;
num++;}
i6=tree.LocateVex(G,m_a6);
j6=tree.LocateVex(G,m_b6);
if(i6==10||j6==10)
SetDlgItemText(IDC_SHOW,"您输入的第6组房间号码有错!");
else{
G.arcs[i6][j6].adj=m_w6;
G.arcs[j6][i6].adj=m_w6;
num++;}
i7=tree.LocateVex(G,m_a7);
j7=tree.LocateVex(G,m_b7);
if(i7==10||j7==10)
SetDlgItemText(IDC_SHOW,"您输入的第7组房间号码有错!");
else{
G.arcs[i7][j7].adj=m_w7;
G.arcs[j7][i7].adj=m_w7;
num++;}
i8=tree.LocateVex(G,m_a8);
j8=tree.LocateVex(G,m_b8);
if(i8==10||j8==10)
SetDlgItemText(IDC_SHOW,"您输入的第8组房间号码有错!");
else{
G.arcs[i8][j8].adj=m_w8;
G.arcs[j8][i8].adj=m_w8;
num++;}
i9=tree.LocateVex(G,m_a9);
j9=tree.LocateVex(G,m_b9);
if(i9==10||j9==10)
SetDlgItemText(IDC_SHOW,"您输入的第9组房间号码有错!");
else
{
G.arcs[i9][j9].adj=m_w9;
G.arcs[j9][i9].adj=m_w9;
num++;}
i10=tree.LocateVex(G,m_a10);
j10=tree.LocateVex(G,m_b10);
if((i10==10||j10==10)&&m_a10!=0)
SetDlgItemText(IDC_SHOW,"您输入的第10组房间号码有错!");
else{
G.arcs[i10][j10].adj=m_w10;
G.arcs[j10][i10].adj=m_w10;
num++;}
i11=tree.LocateVex(G,m_a11);
j11=tree.LocateVex(G,m_b11);
if((i11==10||j11==10)&&m_a11!=0)
SetDlgItemText(IDC_SHOW,"您输入的第11组房间号码有错!");
else{
G.arcs[i11][j11].adj=m_w10;
G.arcs[j11][i11].adj=m_w10;
num++;}
i12=tree.LocateVex(G,m_a12);
j12=tree.LocateVex(G,m_b12);
if((i12==10||j12==10)&&m_a12!=0)
SetDlgItemText(IDC_SHOW,"您输入的第12组房间号码有错!");
else{
G.arcs[i12][j12].adj=m_w12;
G.arcs[j12][i12].adj=m_w12;
num++;}
i13=tree.LocateVex(G,m_a13);
j13=tree.LocateVex(G,m_b13);
if((i13==10||j13==10)&&m_a13!=0)
SetDlgItemText(IDC_SHOW,"您输入的第13组房间号码有错!");
else{
G.arcs[i13][j13].adj=m_w13;
G.arcs[j13][i13].adj=m_w13;
num++;}
i14=tree.LocateVex(G,m_a14);
j14=tree.LocateVex(G,m_b14);
if((i14==10||j14== 10)&&m_a14!=0)
SetDlgItemText(IDC_SHOW,"您输入的第14组房间号码有错!");
else{
G.arcs[i14][j14].adj=m_w14;
G.arcs[j14][i14].adj=m_w14;
num++;}
i15=tree.LocateVex(G,m_a15);
j15=tree.LocateVex(G,m_b15);
if((i15==10||j15==10)&&m_a15!=0)
SetDlgItemText(IDC_SHOW,"您输入的第15组房间号码有错!");
else{
G.arcs[i15][j15].adj=m_w15;
G.arcs[j15][i15].adj=m_w15;
num++;}
i16=tree.LocateVex(G,m_a16);
j16=tree.LocateVex(G,m_b16);
if((i16==10||j16==10)&&m_a16!=0)
SetDlgItemText(IDC_SHOW,"您输入的第16组房间号码有错!");
else{
G.arcs[i16][j16].adj=m_w16;
G.arcs[j16][i16].adj=m_w16;
num++;}
i17=tree.LocateVex(G,m_a17);
j17=tree.LocateVex(G,m_b17);
if((i17==10||j17==10)&&m_a17!=0)
SetDlgItemText(IDC_SHOW,"您输入的第17组房间号码有错!");
else{
G.arcs[i17][j17].adj=m_w17;
G.arcs[j17][i17].adj=m_w17;
num++;}
i18=tree.LocateVex(G,m_a18);
j18=tree.LocateVex(G,m_b18);
if((i18==10||j18==10)&&m_a18!=0)
SetDlgItemText(IDC_SHOW,"您输入的第18组房间号码有错!");
else{
G.arcs[i18][j18].adj=m_w18;
G.arcs[j18][i18].adj=m_w18;
num++;}
i19=tree.LocateVex(G,m_a19);
j19=tree.LocateVex(G,m_b19);
if((i19==10||j19==10)&&m_a19!=0)
SetDlgItemText(IDC_SHOW,"您输入的第19组房间号码有错!");
else{
G.arcs[i19][j19].adj=m_w19;
G.arcs[j19][i19].adj=m_w19;
num++;}
i20=tree.LocateVex(G,m_a20);
j20=tree.LocateVex(G,m_b20);
if((i20==10||j20==10)&&m_a20!=0)
SetDlgItemText(IDC_SHOW,"您输入的第20组房间号码有错!");
else{
G.arcs[i20][j20].adj=m_w20;
G.arcs[j20][i20].adj=m_w20;
num++;}
if(i1!=10&&j1!=10&&i2!=10&&j2!=10&&i3!=10&&j3!=10&&i4!=10&&j4!=10&&i5!=10&&j5!=10&&
i6!=10&&j6!=10&&i7!=10&&j7!=10&&i8!=10&&j8!=10&&i9!=10&&j9!=10&&
(i10!=10&&j10!=10||m_a10==0)&&(i11!=10&&j11!=10||m_a11==0)&&(i12!=10&&j12!=10||m_a12==0)&&
(i13!=10&&j13!=10||m_a13==0)&&(i14!=10&&j14!=10||m_a14==0)&&(i15!=10&&j15!=10||m_a15==0)&&
(i16!=10&&j16!=10||m_a16==0)&&(i18!=10&&j18!=10||m_a18==0)&&(i19!=10&&j19!=10||m_a19==0)&&
(i20!=10&&j20!=10||m_a20==0))
{closedge close;
int i,j, k=0;
k = tree.LocateVex (G,m_v1); //确定第一个输入的顶点在图G中的位置,并从该顶点出发开始建立最小生成树T
for (j=0; j<10; j++ ) //辅助数组close初始化
{
if (j!=k)
{
close[j].adjvex = G.vexs[k];
close[j].lowcost = G.arcs[k][j].adj;
}
}
close[j].lowcost = MAX; //若j对应的顶点与第一个输入的顶点间没有边,则令该边上的权值为最大值
close[j].adjvex = '\0'; //同时,令j对应的顶点所依附的顶点为\0
close[k].lowcost = 0; //初始,U={u}
close[k].adjvex = m_v1;
CString text;
text.Format("成本最低的接线方式为:");
//输出成本最低的接线
//选择其余G.vexnum-1个顶点
CString t[MAX_VERTEX_NUM],s[MAX_VERTEX_NUM],w[MAX_VERTEX_NUM];
for (i = 1; i <10; i++) //选择其余G.vexnum-1个顶点
{
k = tree.minimum(close); //求出T的下一个结点:第K顶点
t[i].Format("%d",close[k].adjvex); //输出生成树的边
s[i].Format("--->%d",G.vexs[k]);
close[k].lowcost = 0; //第K顶点并入U集
for (j=0; j<10; j++)
{
if (G.arcs[k][j].adj < close[j].lowcost) //新顶点并入U后重新选择最小边
{
close[j].adjvex = G.vexs[k];
close[j].lowcost = G.arcs[k][j].adj;
}
}
}
CString a;
a=text+" "+t[1]+s[1]+" "+t[2]+s[2]+" "+t[3]+s[3]+" "+t[4]+s[4]+" "+t[5]+s[5]+" "
+t[6]+s[6]+" "+t[7]+s[7]+" "+t[8]+s[8]+" "+t[9]+s[9]+" "+t[10]+s[10];
SetDlgItemText(IDC_SHOW,a);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -