题目地址:http://soj.me/1934
这道题我觉得挺精妙的,如果用数组顺序储存的话,很不好做,但是用数组模拟双向链表的话,或者直接用双向链表的话,就很简单了。真心觉得这题不错。
#include <iostream>
using namespace std;
int prev[500005];
int next[500005];
int main() {
int N;
cin >> N;
while (N--) {
int number_num, op_num;
cin >> number_num >> op_num;
for (int i = 1; i <= number_num; i++) {
prev[i] = i-1;
next[i] = i+1;
}
while (op_num--) {
int flag, a, b;
cin >> flag >> a >> b;
if (flag == 1) {
next[prev[a]] = next[a];
prev[next[a]] = prev[a];
next[prev[b]] = a;
prev[a] = prev[b];
next[a] = b;
prev[b] = a;
} else if (flag == 2) {
next[prev[a]] = next[a];
prev[next[a]] = prev[a];
prev[a] = b;
next[a] = next[b];
prev[next[b]] = a;
next[b] = a;
}
}
int count = 0;
int number = next[0];
while (count < number_num) {
cout << number << ' ';
number = next[number];
count++;
}
cout << endl;
}
//system("pause");
return 0;
}