/*
问题描述
给定N个整数组成的序列,每次交换当前第x个与第y个整数,要求输出最终的序列。
输入格式
第一行为序列的大小N(1<=N<=1000)和操作个数M(1<=M<=1000)。
第二行包含N个数字,表示初始序列。
接下来M行,每行两个整数x,y (1<=x,y<=N),
表示要交换的两个整数。在一次交换中,如果x和y相等,则不会改变序列的内容。
输出格式
输出N行,为交换后的序列中的数。
样例输入
5 4
1 2 3 4 5
2 1
4 3
4 4
5 1
样例输出
5
1
4
3
2
*/
#include <stdio.h>
void shuru(int,int *);
void shuchu(int,int *);
void chaozuo(int,int,int *,int *);
void jiaohuan(int *,int *);
void paixu(int,int *);
int main(void)
{
int n , m;
scanf("%d",&n);
scanf("%d",&m);
int c = 2 * m;
int sz[n];
int cz[c];
shuru(n,sz);
shuru(c,cz);
paixu(c,cz);
chaozuo(n,c,sz,cz);
shuchu(n,sz);
return 0;
}
void paixu(int c,int *cz)
{
int i ;
for(i = 1; i <= c; i += 2)
{
if(cz[i] > cz[i + 1])
{
jiaohuan(&cz[i],&cz[i + 1]);
}
}
}
void jiaohuan(int *p,int *q)
{
int ls = *p;
*p = *q ;
*q = ls ;
}
void chaozuo(int n,int c,int *sz,int *cz)
{
int i;
for(i = 1; i <= c; i += 2)
{
int n1 , n2;
for(n1 = 1; n1 <= n; n1 ++)
{
if(cz[i] == n1)
{
for(n2 = n1; n2 <= n; n2 ++)
{
if(cz[i + 1] == n2)
{
jiaohuan(&sz[n1],&sz[n2]);
}
}
}
}
}
}
void shuru(int n,int *s)
{
int i;
for(i = 1; i <= n; i ++)
{
scanf("%d",&s[i]);
}
}
void shuchu(int n,int *s)
{
int i;
for(i = 1; i <= n; i ++)
{
printf("%d\n",s[i]);
}
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交