</pre><pre name="code" class="cpp"><span style="font-family: Arial, Helvetica, sans-serif;">#include<stdlib.h></span>
#include<stdio.h> #include "stack" #include "iostream" using namespace std; #define x 9999 #define max 9999 int dist[10];//记录最短路径为多少 int path[10];//记录最短路径 void fpath(int a[][10]); int froute(int a[][10]); void main() { stack<int> st; int i,m; int a[10][10]={ {x,4,2,3,x,x,x,x,x,x}, {x,x,x,x,10,9,x,x,x,x}, {x,x,x,x,6,7,10,x,x,x}, {x,x,x,x,x,3,8,x,x,x}, {x,x,x,x,x,x,x,4,8,x}, {x,x,x,x,x,x,x,9,6,x}, {x,x,x,x,x,x,x,5,4,x}, {x,x,x,x,x,x,x,x,x,8}, {x,x,x,x,x,x,x,x,x,4}, {x,x,x,x,x,x,x,x,x,x}}; fpath(a); printf("最短路径大小为: %d\n",dist[9]); int end =9; while(end>0) { st.push(end+1); end =path[end]; } st.push(1); while(!st.empty()) { cout<<st.top()<<" "; st.pop(); } cout<<endl; } void fpath(int data[][10]) { int min; for (int i=0;i<10;i++) { dist[i] =0; path[i] =0; } for (i=1;i<10;i++) { min =100; for (int j=0;j<=i;j++) { if (data[j][i]<x) { dist[i] =data[j][i] +dist[j]; if (dist[i]<min) { min =dist[i]; path[i] =j; } } } dist[i] =min; } }