- #include<stdio.h>
- #define MAXN 100000
- struct node{
- int data,next;
- int nextr;
- };
- struct node a[MAXN];
- int n,k,start,startr;
- void read();
- void reverse();
- int main(){
- read();
- reverse();
- return 0;
- }
- void read(){
- int i;
- int addr,data,next;
- scanf("%d %d %d",&start,&n,&k);
- for(i=0;i<n;i++){
- scanf("%d %d %d",&addr,&data,&next);
- a[addr].data = data;
- a[addr].next = next;
- }
- i=1;
- addr = a[start].next;
- while(addr!=-1){
- addr = a[addr].next;
- i++;
- }
- n = i;
- }
- void reverse(){
- int s[MAXN],i,j,count,addr,addrn;
- s[0] = start;
- j=1;
- count = n/k;
- while(j<=count){
- for(i=0;i<k;i++){
- if(j==1 && i==0){
- addrn = start;
- }
- else{
- addr = addrn;
- addrn = a[addr].next;
- a[addrn].nextr = addr;
- }
- }
- s[j] = addrn;
- j++;
- }
- // 输出
- for(i=1;i<=count;i++){
- addr = s[i];
- for(j=1;j<=k;j++){
- if(j!=k){
- printf("%05d %d",addr,a[addr].data);
- if(a[addr].nextr!=-1)
- printf("%05d\n",a[addr].nextr);
- else printf("-1\n");
- addr = a[addr].nextr;
- }
- else if(j==k){
- printf("%05d %d",addr,a[addr].data);
- }
- }
- if(i!=count) printf("%05d\n",s[i+1]);
- }
- addr = a[s[count]].next;
- if(addr==-1) printf("-1\n");
- else{
- printf("%05d\n",addr);
- while(addr!=-1){
- printf("%05d %d",addr,a[addr].data);
- if(a[addr].next!=-1)
- printf("%05d\n",a[addr].next);
- else printf("-1\n");
- addr = a[addr].next;
- }
- }
- }
注意: 1. 实现方法; 2. 格式输出, 特别是输出 - 1 的时候.
来源: http://www.bubuko.com/infodetail-3486383.html