果然还是写一题发一个博客好一点,现在都有点记不清自己写的是什么了。。。
Floyd算法的题,需要判环
//Memory Time
//224K 0MS
#include<iostream>
using namespace std;
void floyd(int dis[][101], int vexNum);
int dis[101][101];
int main()
{
int stockBrokerNum ;
while(cin >> stockBrokerNum && stockBrokerNum != 0)
{
for(int i = 1; i <= stockBrokerNum; i++)
for(int j = 1; j <= stockBrokerNum; j++)
dis[i][j] = 1000000000;
for(int i = 1; i <= stockBrokerNum; i++)
dis[i][i] = 0;
int dstNum;
for(int i = 1; i <= stockBrokerNum; i++)
{
cin >> dstNum;
int dst, cost;
for(int j = 0; j < dstNum; j++)
{
cin >> dst >> cost;
dis[i][dst] = cost;
}
}
floyd(dis, stockBrokerNum);
int minCost = 1000000000;
int minMember = -1;
for(int i = 1; i <= stockBrokerNum; i++)
{
int tempMax = -1;
for(int j = 1; j <= stockBrokerNum; j++)
{
if(dis[i][j] > tempMax)
{
tempMax = dis[i][j];
}
}
if(tempMax < minCost)
{
minCost = tempMax;
minMember = i;
}
}
if(minCost != 1000000000)
{
cout << minMember << " " << minCost << endl;
}
else
{
cout << "disjoint" << endl;
}
}
return 0;
}
void floyd(int dis[][101], int vexNum)
{
for(int i = 1; i <= vexNum ; i ++)
{
for(int j = 1; j <= vexNum; j++)
{
for(int k = 1; k <= vexNum; k++)
{
int tempMin;
tempMin = min(dis[j][k], dis[j][i] + dis[i][k]);
dis[j][k] = tempMin;
}
}
}
}