输入一个n*n的矩阵,输出第一点与最后一点的距离
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3fffffff
int n,op1,op2,a[100][100],dis[100];
bool flag[100];
void dijkstra(){
for(int i=0;i<n;i++) dis[i]=a[0][i];
flag[0]=true;
dis[0]=0;
for(int i=1;i<n;i++){
op2=inf;
for(int j=0;j<n;j++){
if(!flag[j]&&dis[j]<op2){
op1=j;
op2=dis[j];
}
}
flag[op1]=true;
for(int j=0;j<n;j++){
if(flag[j]||a[op1][j]==inf) continue;
op2=dis[op1]+a[op1][j];
if(op2<dis[j]) dis[j]=op2;
}
}
}
int main(){
// freopen("main.in","r",stdin);
// freopen("main.out","w",stdout);
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&op1);
a[i][j]=inf;
if(op1||i==j) a[i][j]=op1;
}
}
dijkstra();
printf("%d\n",dis[n-1]);
return 0;
}