(正确率 91% )
题目:
代码:
//图的应用
#include <iostream>
using namespace std;
int main()
{
int map[20][4]; //数组存储图
int dotIO[10][3], count1 = 0, count2 = 0; //记录出度与入度为 0 的点
int In, Out; //记录起点与终点
int i, j; //循环变量
int n, e; //点、边数
int flag, next; //判断回路的标志
int maxLen = 0; //存储关键路径长度
int N = 0;
for (j = 0; j < 10; j++)
dotIO[j][0] = dotIO[j][1] = dotIO[j][2] = -1;
cin >> n >> e;
for (i = 0; i < e; i++)
{
cin >> map[i][0] >> map[i][1] >> map[i][2];
map[i][3] = map[i][2];
for (j = 0; j <= i; j++) //求暂时关键路径
{
if (map[j][1] == map[i][0])
if (map[j][3] + map[i][2] > map[i][3])
map[i][3] = map[j][3] + map[i][2];
}
for (j = 0; j < 10; j++) //出度
{
if (dotIO[j][0] == map[i][0])
{
dotIO[j][1]++;
break;
}
if (dotIO[j][0] == -1)
{
dotIO[j][0] = map[i][0];
dotIO[j][1] = 1;
dotIO[j][2] = 0;
break;
}
}
for (j = 0; j < 10; j++) //出度
{
if (dotIO[j][0] == map[i][1])
{
dotIO[j][2]++;
break;
}
if (dotIO[j][0] == -1)
{
dotIO[j][0] = map[i][1];
dotIO[j][2] = 1;
dotIO[j][1] = 0;
break;
}
}
}
//判断孤立点
for (i = 0; i < 10; i++)
if (dotIO[i][0] == -1)
{
N = i;
break;
}
if (N != n)
{
cout << "false" << endl;
return 0;
}
//判断出度与入度
for (j = 0; j < 10; j++)
{
if (dotIO[j][1] == 0)
{
Out = dotIO[j][0];
count1++;
}
if (dotIO[j][2] == 0)
{
In = dotIO[j][0];
count2++;
}
}
if (count1 != 1 || count2 != 1)
{
cout << "false" << endl;
return 0;
}
//判断回路
for (i = 0; i < e; i++)
{
flag = map[i][0];
next = map[i][1];
for (j = i + 1; j < e; j++)
{
if (map[j][0] == next)
next = map[j][1];
if (next == flag)
{
cout << "false" << endl;
return 0;
}
}
}
//计算关键路径
for (i = 0; i < e; i++)
{
maxLen = max(map[i][3], maxLen);
}
cout << maxLen << endl;
return 0;
}