1 #include<iostream> 2 #include<algorithm> 3 #include<stack> 4 using namespace std; 5 stack<int> a[3]; 6 int b[60]; 7 int q=0; 8 int solve(int from,int to) 9 { 10 if(a[from].empty()) 11 {//-1有错 12 return -1; 13 } 14 if(!a[to].empty())//a[to].top()有可能为空,要先进行判断 15 if(a[from].top()>a[to].top()) 16 return -1; 17 a[to].push(a[from].top()); 18 a[from].pop(); 19 return 0; 20 } 21 void empty() 22 { 23 int i; 24 for(i=0;i<3;i++) 25 { 26 if(!a[i].empty()) 27 a[i].pop(); 28 } 29 } 30 int main() 31 { 32 int T,n,m,i,j,from,to,get; 33 while(cin>>T) 34 { 35 while(T--) 36 { 37 cin>>n>>m; 38 for(i=n;i>0;i--) 39 a[0].push(i); 40 for(j=1;j<=m;j++) 41 { 42 cin>>from>>to; 43 get=solve(from-1,to-1); 44 if(get==-1) 45 { 46 b[q++]=0-j; 47 empty();//每次退出时应该把栈的内容清空 48 while(j<m)//要等输入完成才能退出本次循环 49 { 50 j++; 51 cin>>from>>to; 52 } 53 break; 54 } 55 if(a[0].empty()&&a[1].empty()&&a[2].top()==1) 56 { 57 b[q++]=j; 58 empty(); 59 while(j<m) 60 { 61 j++; 62 cin>>from>>to; 63 } 64 break; 65 }else if(j==m) 66 { 67 b[q++]=0; 68 empty(); 69 } 70 } 71 } 72 for(i=0;i<q;i++) 73 cout<<b[i]<<endl; 74 } 75 return 0; 76 }
时间: 2024-11-06 09:54:11