nyist 93 汉诺塔(三)

题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=93

判断给你的操作是否满足要求:

使用三个栈来操作,模拟该过程

  1 #include<stdio.h>
  2 #include <string.h>
  3 
  4 #define N 105
  5 
  6 int a[4][N];
  7 int f[N][2];
  8 
  9 void init(int n)//初始化栈  第一根柱子
 10 {
 11     memset(a,0,sizeof(a));
 12 
 13     int i;
 14     int t = 1;
 15     for(i = n; i >0; i--)
 16       a[1][t++] = i;
 17 }
 18 
 19 void judge(int n,int m)
 20 {
 21     int i;
 22     int j;
 23     int t_a = n;
 24     int t_b = 0;
 25     int t_c = 0;
 26     int flag1 = 1;
 27     int flag = 0;
 28     for(i =0; i < m; i++)
 29     {
 30         flag = 0;
 31        switch(f[i][0])
 32        {
 33            case 1:
 34                 if(t_a <= 0)
 35                   {
 36 
 37                       flag1 = 0;
 38                       flag = 1;
 39                         break;
 40                   }
 41                 else
 42                 {
 43                     switch(f[i][1])
 44                     {
 45                         case 2:
 46                              if(a[2][t_b] < a[1][t_a] && a[2][t_b])
 47                                {
 48                                    flag = 1;
 49                                    flag1 = 0;
 50                                    break;
 51                                }
 52                                else
 53                                {
 54                                    a[2][++t_b] = a[1][t_a--];
 55                                    break;
 56                                }
 57                         case 3:
 58                             if(a[3][t_c] < a[1][t_a] && a[3][t_c])
 59                              {
 60                                  flag = 1;
 61                                  flag1 = 0;
 62                                  break;
 63                              }
 64                              else
 65                              {
 66                                  a[3][++t_c] = a[1][t_a--];
 67 
 68                                  break;
 69                              }
 70                     }
 71                     break;
 72                 }
 73            case 2:
 74               if(t_b <= 0)
 75               {
 76 
 77                   flag = 1;
 78                   flag1 = 0;
 79                   break;
 80               }
 81               else
 82               {
 83                   switch(f[i][1])
 84                   {
 85                       case 1:
 86                         if(a[1][t_a] < a[2][t_b] && a[1][t_a])
 87                          {
 88                              flag = 1;
 89                              flag1 = 0;
 90                              break;
 91                          }
 92                          else
 93                          {
 94                              a[1][++t_a] = a[2][t_b--];
 95                              break;
 96                          }
 97                       case 3:
 98                         if(a[3][t_c] < a[2][t_b] && a[3][t_c])
 99                           {
100                               flag = 1;
101                               flag1 = 0;
102                               break;
103                           }
104                           else
105                           {
106                               a[3][++t_c] = a[2][t_b--];
107                               break;
108                           }
109                   }
110                   break;
111               }
112            case 3:
113              if(t_c <= 0)
114              {
115                  flag = 1;
116                  flag1 = 0;
117                  break;
118              }
119              else
120              {
121                  switch(f[i][1])
122                  {
123                      case 1:
124                          if(a[1][t_a] < a[3][t_c] && a[1][t_a])
125                            {
126                                flag = 1;
127                                flag1 = 0;
128                                break;
129                            }
130                            else
131                            {
132                                a[1][++t_a]  = a[3][t_c--];
133                                break;
134                            }
135                      case 2:
136                        if(a[2][t_b] < a[3][t_c] && a[2][t_b])
137                         {
138                             flag = 1;
139                             flag1 = 0;
140                             break;
141                         }
142                         else
143                         {
144                             a[2][++t_b] = a[3][t_c--];
145                             break;
146                         }
147                  }
148                  break;
149              }
150        }
151        if(flag)
152        {
153            printf("illegal\n");
154            break;
155        }
156     }
157     /*
158     for(j = 0; j <= t_a; j++)
159      printf("%d    ",a[1][j]);
160      printf("\n");
161    for(j = 0; j <= t_b; j++)
162      printf("%d    ",a[2][j]);
163      printf("\n");
164    for(j = 0; j <= t_c; j++)
165      printf("%d    ",a[3][j]);
166      printf("\n");
167     */
168     if(flag1)
169       printf("legal\n");
170 }
171 int main()
172 {
173     int T;
174     scanf("%d",&T);
175     while(T--)
176     {
177         memset(f,0,sizeof(f));
178 
179         int n,m;
180         scanf("%d%d",&n,&m);
181         init(n);
182         int i;
183         for(i = 0; i < m; i++)
184           scanf("%d%d",&f[i][0],&f[i][1]);
185         judge(n,m);
186     }
187     return 0;
188 }
原文地址:https://www.cnblogs.com/yyroom/p/3040625.html