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 }

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

你可能感兴趣的:(OJ)