| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
当循环时,直接将循环的提出,放到空档,挪完后在放到该放的位置,不要想复杂了,,,#include<stdio.h>
#include<string.h>
int A[10001],B[10001],C[10001];
int N,K,s,sum,zong;
void pan(int x)
{
int hh=0;
int i,j=0,k=1;
if(x>=sum)
return;
if(B[x]==0)
{
for(i=x+1;i<=N;i++)
if(x==B[i])
{
B[x]=x;
B[i]=0;
printf("%d %d\n",i,x);
}
return;
}
if(B[x]!=0)
{
memset(C,0,sizeof(C));
C[x]=1;
A[k++]=x;
x=B[x];
int qp;
qp=sum;
while(qp--)
{
if(B[x]!=0&&C[B[x]]!=1)
{
A[k++]=x;
C[x]=1;
x=B[x];
}
if(B[x]==0)
{
hh=1;
break;
}
if(C[x]==1)
break;
}
if(hh==1)
{
for(i=k-1;i>=1;i--)
{
B[B[A[i]]]=B[A[i]];
printf("%d %d\n",A[i],B[A[i]]);
}
B[A[1]]=0;
pan(A[1]);
return;
}
if(hh==0)
{
for(i=N;i>=1;i--)
{
if(B[i]==0)
{
printf("%d %d\n",x,i);
B[i]=B[x];
for(j=k-1;j>=1;j--)
{
B[B[A[j]]]=B[A[j]];
printf("%d %d\n",A[j],B[A[j]]);
}
B[A[1]]=B[i];
B[i]=0;
printf("%d %d\n",i,A[1]);
break;
}
}
}
return;
}
}
int main()
{
int i,k;
sum=1;
zong=0;
memset(B,0,sizeof(B));
scanf("%d%d",&N,&K);
while(K--)
{
scanf("%d",&s);
for(i=0;i<s;i++)
{
scanf("%d",&k);
B[k]=sum;
if(k!=sum)
zong=1;
sum++;
}
}
if(zong==0)
printf("No optimization needed\n");
for(i=1;i<sum;i++)
{
if(B[i]!=i)
pan(i);
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator