- //模板
- #define N 1001
- #define inf (1<<31)
- int mat[N][N],pre[N],d[N];
- void dijkstra(int s,int n)
- {
- int i,j,k;bool v[N];
- for(i=0;i<n;i++) d[i]=inf,pre[i]=-1,v[i]=false;
- for(i=d[s]=0;i<n;i++)
- {
- for(j=0,k=-1;j<n;j++) if(!v[j]&&(k==-1||d[j]<d[k])) k=j;
- for(j=0,v[k]=true;j<n;j++) if(!v[j]&&d[k]+mat[k][j]<d[j]) d[j]=d[k]+mat[pre[j]=k][j];
- }
- }