The Blocks Problem,我的编译器对这个程序出现了很奇怪的错误!

这个程序主要是练习链表的用法,我既然无法通过编译。最重要的是我不知道编译出错的地方究竟哪里错了!

 我的程序代码:

 

/*
The Blocks Problem
input:
10
move 9 onto 1
move 8 over 1
move 7 over 1
move 6 over 1
pile 8 over 6
pile 8 over 5
move 2 over 1
move 4 over 9
quit
output:
0: 0
1: 1 9 2 4
2:
3: 3
4:
5: 5 8 7 6
6:
7:
8:
9:
*/
#include "stdio.h"
#include "iostream"
#include "string"
using namespace std;

struct node
{
 int a;
 node* next;
};

int main()
{
 char str1[5],str2[5];
 int i,j,n,k;
 scanf("%d",&n);
 if(n<1||n>=25)
  return 0;
 node* q[25];
 node* p,p1,p2,p3;
 int flag1,flag2;
 for(k=0;k<n;k++){
  p=new node;
  p->a=k;
  q[k].next=p;
 }
 while(1)
 {
  cin>>str1;
  if(!strcmp(str1,"quit"))
   break;
  cin>>i>>str2>>j;
  if(!strcmp(str1,"move")){
   for(k=0;k<n;k++)
   {
    p=q[k];
    p=p->next;
    while(p)
    {
     if(p->a==i)
      break;
     p=p->next;
    }
    if(p->a==i)
     break;
   }
   p1=p;
   p=p->next;
   p1->next=NULL;
   if( ( (q[k]->next)->a ) == (p1->a)  )
    q[k]->next=NULL;
   while(p)
   {
    q[p->a]->next=p;
    p3=p;
    p=p->next;
    p3->next=NULL;
   }
  }
  if(!strcmp(str1,"pile")){
   for(k=0;k<n;k++)
   {
    p=q[k];
    p=p->next;
    while(p)
    {
     if(p->a==i)
      break;
     p=p->next;
    }
    if(p->a==i)
     break;
   }
   p1=p;
   if(q[k]->next->a==p1->a)
    q[k]->next=NULL;
   flag1=k;
  }
  if(!strcmp(str2,"onto")){
   for(k=0;k<n;k++)
   {
    p=q[k];
    p=p->next;
    while(p)
    {
     if(p->a==j)
      break;
     p=p->next;
    }
    if(p->a==j)
     break;
   }
   flag2=k;
   if(flag1==flag2)
    continue;
   p2=p;
   p=p->next;
   p2->next=NULL;
   while(p)
   {
    q[p->a]->next=p;
    p3=p;
    p=p->next;
    p3->next=NULL;
   }
   p2->next=p1;
  }
  if(!strcmp(str2,"over")){
   for(k=0;k<n;k++)
   {
    p=q[k];
    p=p->next;
    while(p)
    {
     if(p->a==j)
      break;
     p=p->next;
    }
    if(p->a==j)
     break;
   }
   flag2=k;
   if(flag1==flag2)
    continue;
   while(p->next)
    p=p->next;
   p->next=p1;
  }
 }
 for(k=0;k<n;k++){
  printf("%d:",k);
  while(!q[k]->next)
  {
   printf(" %d",q[k]->next->a);
  }
  printf("/n");
 }
 return 0;
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值