STACKMAT.C
上传用户:amwwyq
上传日期:2021-05-31
资源大小:1k
文件大小:2k
源码类别:

手机WAP编程

开发平台:

C/C++

  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<alloc.h>
  4. #include<math.h>
  5.  void stackpush(int ,int);
  6.  void stackpop(struct node **);
  7.       struct node
  8.       {
  9.       int x1,y1,xd,yd;
  10.       struct node *link;
  11.       };
  12.   struct node *p=NULL,*r;
  13.   int x,y;
  14. void main()
  15. {
  16. int k=0,c=0,counter=0,i,j,xk,yk;
  17. clrscr();
  18.   printf("enter co-ordinates of Pawn=");
  19.   scanf("%d %d",&x,&y);
  20.   printf("enter co-ordinates of Knight=");
  21.   scanf("%d %d",&xk,&yk);
  22. while(y<=8)
  23. { y++;
  24. printf("%d ",y);
  25. stackpush(xk+2,yk+1);
  26. stackpush(xk+2,yk-1);
  27. stackpush(xk+1,yk+2);
  28. stackpush(xk+1,yk-2);
  29. stackpush(xk-2,yk+1);
  30. stackpush(xk-2,yk-1);
  31. stackpush(xk-1,yk+2);
  32. stackpush(xk-1,yk-2);
  33. r=p;
  34. while(r!=NULL)
  35. { printf("%d %dn",r->x1,r->y1);
  36. if(r->x1==x && r->y1==y)
  37. {k=1; }
  38. r=r->link;
  39.  }
  40.    if(k==1)
  41.    {printf("knight won");
  42.    getch();
  43.    exit(); }
  44. r=p; c=0;   counter=0;
  45.       while(r!=NULL)
  46.        { counter++;
  47.        if(c > r->xd)
  48.   c=r->xd;
  49.        r=r->link;}
  50.        r=p;
  51.        for(i=1;i<=counter;i++)
  52.        {
  53.        if(r->xd!=c)
  54.        stackpop(&r);
  55.        r=r->link;
  56.        }
  57. p=r; counter=0;
  58. while(r!=NULL)
  59. { counter++;
  60. r=r->link; }
  61. if(counter==1)
  62. yk=p->y1;
  63. if(counter==2)
  64. {
  65. if(p->yd > p->link->yd)
  66. yk=p->y1;
  67. }
  68. y++;
  69. }
  70. getch();
  71. }
  72.      void stackpush(int a,int b)
  73.      {
  74.      if(a>=0 && a<=8 && b>=0 && b<=8 )
  75.      {
  76.      r=(struct node *)malloc(sizeof(struct node));
  77.      r->x1=a; r->y1=b; r->xd=abs(x-a); r->yd=abs(y-b);
  78.      if(p==NULL)
  79.      {p=r; p->link=NULL;}
  80.      else
  81.      {r->link=p;
  82.      p=r;} }
  83.      }
  84.      void  stackpop(struct node **q)
  85.      {
  86.       struct node *temp;
  87.       temp=*q;
  88.       if(temp==p)
  89.       *q=temp->link;
  90.       else
  91.       {
  92.       while(p->link!=temp)
  93.       p=p->link;
  94.       p->link=temp->link;
  95.       }
  96.      free(temp);
  97.      getch();
  98.      }