题目出自哪里?哪个网站?
就是对于商量好的2个人,进行先后顺序比较,先后顺序可以用数组的索引进行标记。
比较后进行交换顺序。
有一个注意的就是
顺序是:1 2 3
1 3 商量了
1 2 也商量了
这个交换的顺序是怎样的?是先1 3 交换,还是1 2 交换
//超时,方法是双向链表,你看能不能优化一下。
#include <iostream>
#include <map>
using namespace std;
struct Node
{
int pre;
int next;
int cur;
};
int main()
{
int t,i,a,b,n,m,count,temp;
int pre,cur;
Node node,head;
map<int,Node> queue;
cin>>t;
while(t--)
{
count = 0;
pre = -1;
cin>>n>>m;
for(i=0;i<n;++i)
{
cin>>cur;
node.pre = pre;
node.cur = cur;
node.next = -1;
queue[cur] = node;
if(pre != -1)
{
queue[pre].next = cur;
}
else
{
head = node;
}
pre = cur;
}
while(m--)
{
cin>>a>>b;
node = queue[a];
while(node.pre!=-1)
{
if(node.pre == b)//b在a的前面
{
//将a从当前位置删除
queue[queue[a].pre].next=queue[a].next;
queue[queue[a].next].pre=queue[a].pre;
//在b前面插入a
queue[a].next = b;
queue[a].pre = queue[b].pre;
if(queue[b].pre == -1)
{
head = queue[a];
}
queue[b].pre = a;
break;
}
node = queue[node.pre];
}
//a在b的前面
if(node.pre == -1)
{
//将b从当前位置删除
queue[queue[b].pre].next=queue[b].next;
queue[queue[b].next].pre=queue[b].pre;
//在a前面插入b
queue[b].next = a;
queue[b].pre = queue[a].pre;
if(queue[a].pre == -1)
{
head = queue[b];
}
queue[a].pre = b;
}
}
node = head;
while(node.next != -1)
{
cout<<node.cur<<" ";
node = queue[node.next];
}
cout<<node.cur<<endl;
}
}
温馨提示:内容为网友见解,仅供参考