POJ 2457 Part Acquisition

时间:2023-03-09 05:54:19
POJ 2457 Part Acquisition

  第一反应是BFS,比较直观,但是输出路径写的不是很熟练,此外,习惯不好,“==”写成了“=”,所以常量一定放前面!

 #include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
int N, K;
typedef struct node
{
int in, out;
int pos;
}Link;
const int maxn = ;
bool vis[maxn];
Link A[maxn];
int pre[maxn], B[maxn]; int main(void) {
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
scanf("%d%d", &N, &K);
memset(vis, false, sizeof(vis));
queue<Link> Q;
for (int i = ; i < N; i++) {
scanf("%d%d", &A[i].in, &A[i].out);
A[i].pos = i;
if (A[i].in == ) {
pre[i] = -;
vis[i] = true;
Q.push(A[i]);
}
} if (K == ) {
printf("1\n1\n");
} else {
if (Q.empty()) {
printf("-1\n");
} else {
while (!Q.empty()) {
Link front = Q.front();
if (front.out == K) {
break;
}
for (int i = ; i < N; i++) {
if (!vis[i] && A[i].in == front.out) {
Q.push(A[i]);
vis[i] = true;
pre[i] = front.pos;
}
}
Q.pop(); }
if (Q.empty()) {
printf("-1\n");
} else {
int cnt = ;
int i = Q.front().pos;
for (;- != pre[i];) {
B[cnt++] = A[i].out;
i = A[pre[i]].pos;
}
B[cnt++] = A[i].out; printf("%d\n1\n", cnt+);
for (int k = cnt-; k >= ; k--) {
printf("%d\n", B[k]);
}
}
}
} }

  看到别人用SPFA、dijkstra,有时间也试一试!

  【待写】