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 }
用栈模拟铜片的移动!!!