int main(){
int mini;
int s;
Graph G;
// freopen("/config/workspace/answer/test","r",stdin);
cin>>G.vexNumber>>s;
for(int i=0;i<G.vexNumber;i++){
for(int j=0;j<G.vexNumber;j++){
cin>>G.adjMatrix[i][j];
}
}
int u[MAX_SIZE];
int path[MAX_SIZE];
int shortest[MAX_SIZE];
u[s]=1;
path[s]=s;
shortest[s]=0;
//初始化辅助向量
for(int i=0;i<G.vexNumber;i++){
if(i!=s){
u[i]=0;
if(G.adjMatrix[s][i]){
shortest[i]=G.adjMatrix[s][i];
path[i]=s;
}
else
shortest[i]=2E64-1;}
}
int k;
for(int n=1;n<G.vexNumber;n++){
mini=2E64-1;
for(int j=0;j<G.vexNumber;j++){
if(!u[j]&&shortest[j]<mini)
{mini=shortest[j];
k=j;}
}
u[k]=1;
//k的纳入是否影响最短路径,更新path 和shortest[]
for(int i=0;i<G.vexNumber;i++){
if(G.adjMatrix[k][i]&&shortest[k]+G.adjMatrix[k][i]<shortest[i]&&!u[i]){
shortest[i]=shortest[k]+G.adjMatrix[k][i];
path[i]=k;
}
else;
}
}
//修改结果,以达到输出要求
for(int i=0;i<G.vexNumber;i++){
if(shortest[i]==2E64-1)
mini=-1;
}
//输出结果
for(int i=0;i<G.vexNumber;i++)
if(i!=s){
cout<<shortest[i]<<" ";}
return 0;
}
迪吉斯特拉斯算法
最新推荐文章于 2024-08-26 00:02:00 发布