您的位置:首页 > 其它

算法竞赛入门经典第五章例题5-2 The Blocks Problem UVA - 101

2018-01-07 13:07 363 查看
https://vjudge.net/problem/UVA-101

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
#pragma warning(disable:4996)
const int maxn = 30;
vector<int> A[maxn];//A[k]=位置k处的状态
int index[maxn];//index[k]=编号k的木块在的位置
void ini(int x) {
int k = index[x], b;
while ((b=A[k].back()) != x)
index[b] = b,A[b].push_back(b),A[k].pop_back();
}
int main()
{
#ifdef _DEBUG
freopen("in", "rb", stdin);
//freopen("out", "wb", stdout);
#endif // _DEBUG

int N,a,b;
cin >> N;
for (int i = 0; i < N; ++i)
index[i] = i, A[i].push_back(i);
string s, t;
while (cin >> s && s[0] != 'q') {
cin >> a >> t >> b;
if (index[a] == index[b]) continue;
if (s[0] == 'm') ini(a);
if (t[1] == 'n') ini(b);
int k = index[a];
auto it = find(A[k].begin(),A[k].end(), a);
while( it != A[k].end()) {
A[index[b]].push_back(*it);
index[*it] = index[b];
it = A[k].erase(it);
}
}
for (int i = 0; i < N; ++i) {
printf("%d:", i);
for (auto x : A[i])
printf(" %d", x);
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: