64,637
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
int min(int Vlength[],int n){//返回数组中最小非零元素的下标
int min=100;
int j=0;
for(int i=0;i<n;i++){
if(Vlength[i]<min&&Vlength[i]>=0){
min=Vlength[i];
j=i;
}
}
return j;
}
int main(){
int Vnumber,minL=0,sum;//minL用来记录当前可达节点中最小的一个的长度 sum用来判断 VLength[]的和为-9
int Length[9][9];
for (int i=0;i<9;i++)
for(int j=0;j<9;j++)
Length[i][j]=-1;
for (int i=0;i<9;i++)
Length[i][i]=0;
Length[0][1]=4;Length[0][2]=2;Length[0][4]=2;Length[0][5]=1;Length[1][2]=1;Length[2][3]=7;Length[3][4]=15;Length[4][5]=10;Length[4][6]=5;Length[5][7]=11;Length[7][8]=5;
char Vname[]={'a','b','c','d','e','f','g','h','i'};
int VLength[]={0,-1,-1,-1,-1,-1,-1,-1,-1,};//当前长度
int VLength_R[]={-1,-1,-1,-1,-1,-1,-1,-1,-1};//真实路径长度
for(int j=0;;j++){
for(int i=0;i<9;i++){
// VLength[i]=a[j][i];
if(VLength[minL]+Length[minL][i]>VLength_R[i]&&Length[minL][i]>0)
VLength[i]=VLength[minL]+Length[minL][i];
//如果大于0则把结果赋值到VLength_R中
if(VLength[i]>=0)
VLength_R[i]=VLength[i];
}
minL=min(VLength,9); //获取当前路径最短节点的下标
VLength[minL]=-1; //将最短长度标记为负
minL=min(VLength,9);// 获取下一个最短长度
cout<<"当前距离原点最近的节点长度为:"<<minL<<endl;
cout<<"当前可达节点中最小的一个的长度:"<<VLength[minL]<<endl;
//判断当Vlength[]中元素都为-1时跳出循环
sum=0;
for(int i=0;i<9;i++)
sum+=VLength[i];
if(sum==-9)
break;
}
// for(int i=0;i<9;i++)
// cout<<VLength[i]<<endl;
cout<<"原点到各点的最长距离"<<endl;
for(int i=0;i<9;i++)
cout<<VLength_R[i]<<endl;
return 0;
}