只做了9个节点的,无权值,使用了n-1个=8个循环,非常麻烦。一级一级判断是否连接,连接及记录所在节点,以后不再使用,确保无回路。
验证后无回路,但只试过几种情况。
代码如下:
#include<iostream>
using namespace std; int w[][];
int e[][];
void Shuru()
{ for(int i=;i<;i++)
{
for(int j=;j<;j++)
{cout<<"请输入节点"<<i+<<"与节点"<<j+<<"是否存在连通。yes=1;no=0"<<endl;
cin>>w[i][j];
}
}
} void Panduan()
{ for(int p=;p<;p++)
{for(int q=;q<;q++)
{e[p][q]=;}//赋值
}
int d[];
for(int k=;k<;k++)
{d[k]=;}
d[]=; //判断部分
for(int a1=;a1<;a1++)
{
if(w[][a1]==&&d[a1]==)
{e[][a1]=; e[a1][]=;
d[a1]=a1;
for(int a2=;a2<;a2++)
{
if(w[a1][a2]==&&d[a2]==)
{e[a1][a2]=;
e[a2][a1]=;
d[a2]=a2;
for(int a3=;a3<;a3++)
{
if(w[a2][a3]==&&d[a3]==)
{ e[a2][a3]=;
e[a3][a2]=;
d[a3]=a3;
for(int a4=;a4<;a4++)
{
if(w[a3][a4]==&&d[a4]==)
{ e[a3][a4]=;
e[a4][a3]=;
d[a4]=a4;
for(int a5=;a5<;a5++)
{
if(w[a4][a5]==&&d[a5]==)
{ e[a4][a5]=;
e[a5][a4]=;
d[a5]=a5;
for(int a6=;a6<;a6++)
{
if(w[a5][a6]==&&d[a6]==)
{ e[a5][a6]=;
e[a6][a5]=;
d[a6]=a6;
for(int a7=;a7<;a7++)
{
if(w[a6][a7]==&&d[a7]==)
{e[a6][a7]=;
e[a7][a6]=;
d[a7]=a7;
for(int a8=;a8<;a8++)
{
if(w[a7][a8]==&&d[a8]==)
{e[a7][a8]=;
e[a8][a7]=;
d[a8]=a8;
}
}
} }
} }
} }
}
}
}
}
}
}
}
}
}
void main()
{
Shuru();
Panduan();
for(int z=;z<;z++)
{
{for(int x=;x<;x++)
cout<<e[z][x]<<"\t";}
cout<<endl;
} }
示例:
结果: