高中同学让我求8个菜市场和35个销售点(他们之间还会有15个路口)之间35*8=280个组合分别的最短路径及其输出。
最短路水题,嘿嘿。能用自己学到的知识帮助别人解决问题真是极好的享受。
最短路水题,嘿嘿。能用自己学到的知识帮助别人解决问题真是极好的享受。
具体注释可以见代码,写的蛮清楚的。
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3 //INF代表无穷大
const int MAX_N=100;
int map[MAX_N][MAX_N],vis[MAX_N];
int dis[MAX_N];//dis代表到每个点的最短距离
int pre[MAX_N];//记录前驱
int ans[MAX_N];//输出路径的数组
void dijkstr(int x,int m){//x代表开始点,m代表顶点个数
for(int i=1;i<=m;i++){
dis[i]=map[x][i];
vis[i]=0;
if(map[x][i]!=INF)
pre[i]=x;
else
pre[i]=-1;
}
int p;
vis[x]=1;
for(int i=1;i<=m;i++){
int min=INF;
for(int j=1;j<=m;j++){
if(!vis[j]&&dis[j]<min){
m