nyoj93 汉诺塔(三)

 1 #include<stack>
 2 #include<iostream>
 3 using namespace std;
 4 int main()
 5 {
 6     int i,t,N,a,b,m,n;
 7     stack<int> s[4];  //定义一个数组栈 
 8     cin>>N;
 9     while(N--)
10     {
11         cin>>m>>n;
12         for(i=1;i<4;i++)
13             while(!s[i].empty()) s[i].pop(); //清空栈 
14         for(i=m;i>0;--i) s[1].push(i);     //第一根针上的铜片入栈,大的在下 
15         while(n--)
16         {
17             cin>>a>>b;
18             if(!s[a].empty()&&(s[b].empty()||s[a].top()<s[b].top())){
19                 t=s[a].top();   //如果a栈不空且
20                 s[a].pop();        //b栈空或a栈顶上铜片小于b栈顶上铜片,
21                 s[b].push(t);  //则把a栈顶铜片转移到b栈顶 
22             }else break;
23         }
24         if(n+1) cout<<"illegal\n";
25         else cout<<"legal\n";
26     }
27     return 0;
28 }

用栈模拟铜片的移动!!!

原文地址:https://www.cnblogs.com/shihuajie/p/2628617.html