和GG一起回家 http://acm.nuaa.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1015 #include<iostream> #include<cstring> using namespace std; #define MAX 102 #define INF 99999999 int w[MAX][MAX],n; void init(){ int i,j; for(i=0;i<n;++i){ for(j=0;j<n;++j){ cin>>w[i][j]; } } } int dijkstra(int start){ int v[MAX],d[MAX];int i,j; memset(v,0,sizeof(v)); for(i=0;i<n;++i){ d[i]=w[start][i]; } for(i=0;i<n;++i){ int x,m=INF; for(j=0;j<n;++j) if(!v[j] && d[j]<m) m=d[x=j]; v[x]=1;//标记x节点已经访问过 for(j=0;j<n;++j) d[j]=d[j]>d[x]+w[x][j]?d[x]+w[x][j]:d[j]; } return d[n-1]; } int main(int argc, char *argv[]) { while(cin>>n){ init(); cout<<dijkstra(0)<<endl; } return 0; }