/*
思路:
首先让dist初始化,i==j时,让他最大。然后dist等于最开始的权值,最后三重循环,让dist值最小。
*/
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
const int Max_Size=100;
class Floyd
{
private:
int node[Max_Size][Max_Size];
int dist[Max_Size][Max_Size];
int s[Max_Size];
int spot,vertex;
int index;
public:
Floyd()
{
spot=vertex=0;
index=-1;
}
~Floyd(){}
void push(int n,int m)
{
spot=n;
vertex=m;
for(int i=0;i<spot;i++)
{
for(int j=0;j<spot;j++)
{
if(i==j)
{
node[i][j]=0;
continue;
}
node[i][j]=100000;
}
}
while(++index<vertex)
{
int i,j,a;
cin>>i>>j>>a;
node[i][j]=a;
}
for(int i=0;i<spot;i++)
{
for(int j=0;j<spot;j++)
{
dist[i][j]=node[i][j];
}
}
}
void pop()
{
for(int k=0;k<spot;k++)
{
for(int i=0;i<spot;i++)
{
for(int j=0;j<spot;j++)
{
if(dist[i][j]>dist[i][k]+dist[k][j])
{
dist[i][j]=dist[i][k]+dist[k][j];
}
}
}
}
}
void pop1(int n,int m)
{
cout<<dist[n][m];
}
};
int main()
{
Floyd p;
int n,m;
cin>>n>>m;
p.push(n,m);
p.pop();
p.pop1(0,2);//表示的是求两个已知点之间的最小权值
return 0;
}
思路:
首先让dist初始化,i==j时,让他最大。然后dist等于最开始的权值,最后三重循环,让dist值最小。
*/
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
const int Max_Size=100;
class Floyd
{
private:
int node[Max_Size][Max_Size];
int dist[Max_Size][Max_Size];
int s[Max_Size];
int spot,vertex;
int index;
public:
Floyd()
{
spot=vertex=0;
index=-1;
}
~Floyd(){}
void push(int n,int m)
{
spot=n;
vertex=m;
for(int i=0;i<spot;i++)
{
for(int j=0;j<spot;j++)
{
if(i==j)
{
node[i][j]=0;
continue;
}
node[i][j]=100000;
}
}
while(++index<vertex)
{
int i,j,a;
cin>>i>>j>>a;
node[i][j]=a;
}
for(int i=0;i<spot;i++)
{
for(int j=0;j<spot;j++)
{
dist[i][j]=node[i][j];
}
}
}
void pop()
{
for(int k=0;k<spot;k++)
{
for(int i=0;i<spot;i++)
{
for(int j=0;j<spot;j++)
{
if(dist[i][j]>dist[i][k]+dist[k][j])
{
dist[i][j]=dist[i][k]+dist[k][j];
}
}
}
}
}
void pop1(int n,int m)
{
cout<<dist[n][m];
}
};
int main()
{
Floyd p;
int n,m;
cin>>n>>m;
p.push(n,m);
p.pop();
p.pop1(0,2);//表示的是求两个已知点之间的最小权值
return 0;
}