int min;//定义最小值变量 int node=0;//最小值对应的点7 for (int i = 1; i <= city; i++) { min = inf;//初始化最小值 for (int j = 1; j <= city; j++)//循环查找最小值 { if (book[j] == false && dis[j] <= min) { min = dis[j]; node = j; } }
book[node] = true;//标记找到的点N //此时标记到的点N到起点的距离就是起点到点N的最短路径(因为我们每次都找最短的) //对点N进行扩展 for (int k = 1; k <= city; k++)//在点N的基础上,遍历其他点 { if (cityMap[node][k] < 999999)//如果点N到k点有路径 { if (dis[k] > (dis[node] + cityMap[node][k]))//如果起点到k点的路径大于起点到点N再到k点的路径 { dis[k] = dis[node] + cityMap[node][k];//更新一下最短路径,即经过点N再到点k更短 } } } }
for (int i = 1; i <= city; i++) cout << dis[i] << " "; delete [] dis;//数组的释放 }
intmain() { cin >> city >> road; //初始化地图 int** cityMap = newint*[city + 1]; for (int i = 0; i < city + 1; i++) { cityMap[i] = newint[city + 1]; for (int j = 0; j < city + 1; j++) { cityMap[i][j] = inf; } } for (int i = 1; i <= city; i++) cityMap[i][i] = 0;
//初始化标记数组 bool* book = newbool[city + 1]; for (int i = 1; i <= city; i++) book[i] = false;
//录入地图数据 int a, b,c; for (int i = 0; i < road; i++) { cin >> a >> b >> c; cityMap[a][b] = c; }
int min;//定义最小值变量 int node=0;//最小值对应的点7 for (int i = 1; i <= city; i++) { min = inf;//初始化最小值 for (int j = 1; j <= city; j++)//循环查找最小值 { if (book[j] == false && dis[j] <= min) { min = dis[j]; node = j; } }
book[node] = true;//标记找到的点N //此时标记到的点N到起点的距离就是起点到点N的最短路径(因为我们每次都找最短的) //对点N进行扩展 for (int k = 1; k <= city; k++)//在点N的基础上,遍历其他点 { if (cityMap[node][k] < 999999)//如果点N到k点有路径 { if (dis[k] > (dis[node] + cityMap[node][k]))//如果起点到k点的路径大于起点到点N再到k点的路径 { dis[k] = dis[node] + cityMap[node][k];//更新一下最短路径,即经过点N再到点k更短 } } } }
for (int i = 1; i <= city; i++) cout << dis[i] << " "; delete [] dis;//数组的释放 }