蒟蒻不知道为什么SPFA函数的位置不对,居然会卡一个点
#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
int n, m;
int h[N], e[N], ne[N], idx;
int dist[N];
int path[N];
void add(int a, int b)
{
e[idx] = b;
ne[idx] = h[a];
h[a] = idx ++ ;
}
void dfs(int u)
{
if (path[u]) dfs(path[u]);
cout << char('A' + u - 1);
}
void SPFA(int k)
{
memset(dist, 0, sizeof(dist));
dist[0] = 1;
queue<int> q;
q.push(0);
while (!q.empty())
{
int t = q.front(); q.pop();
for (int i = h[t]; i != -1; i = ne[i])
{
int j = e[i];
if (dist[j] < dist[t] + 1)
{
dist[j] = dist[t] + 1;
path[n + 1] = j;
path[j] = t;
q.push(j);
}
if (dist[j] > n + 2)
{
cout << "Inconsistency found after " << k <<" relations." << endl;
exit(0);
}
}
}
if (dist[n + 1] != n + 2 && k == m)
{
cout << "Sorted sequence cannot be determined." << endl;
exit(0);
}
if (dist[n + 1] == n + 2)
{
cout << "Sorted sequence determined after " << k << " relations: ";
dfs(path[n + 1]);
cout << "." << endl;
exit(0);
}
}
bool g[N][N];
int main()
{
memset(h, -1, sizeof(h));
cin >> n >> m;
for (int i = 1; i <= n; i ++ )
{
add(0, i);
add(i, n + 1);
}
for (int i = 1; i <= m; i ++ )
{
char x, a, y;
cin >> x >> a >> y;
int u = x - 'A' + 1;
int v = y - 'A' + 1;
if (!g[u][v])
{
g[u][v] = true;
add(u, v);
SPFA(i);
*********就是这里,我把SPFA放在了这个if语句里面就没有过,但是放在外面就可以过***********
}
}
return 0;
}
