头条笔试
//只写了第一道 //AC代码,记录一下证明我参加了-_- //bfs算法,输入让我搞了很久,心痛 #include <iostream> #include<utility> #include<cstdio> #include<cstring> #include<queue> using namespace std; int num[12][12]; int state[12][12]; int offset[4][2]={1,0,0,1,-1,0,0,-1}; int main() { int i,j,step=0; char ch; memset(num,0,sizeof(num)); memset(state,0,sizeof(state)); cin.get(ch); for(i=0;i<12;++i) { for(j=0;j<12;) { if(ch!=' '&&ch!='\n') {num[i][j]=ch-'0';++j;} if(ch=='\n') break; cin.get(ch); } cin.get(ch); if(ch=='\n') break; } bool flag=false; int cnt2=0,cnt2_temp=0; queue<pair<int,int> >q; for(int t=0;t<=i;++t) for(int s=0;s<j;++s) { if(num[t][s]==2) { q.push(pair<int,int>(t,s)); ++cnt2; state[t][s]=1; } } while(!q.empty()) { pair<int,int>f=q.front(); q.pop(); --cnt2; for(int k=0;k<4;++k) { int x=f.first+offset[k][0]; int y=f.second+offset[k][1]; if(x<=i&&y<j&&state[x][y]==0&&num[x][y]==1) { flag=true; num[x][y]=2; state[x][y]=1; q.push(pair<int,int>(x,y)); ++cnt2_temp; } } if(cnt2<=0){ if(!flag) break; if(flag) { cnt2=cnt2_temp; cnt2_temp=0; ++step; flag=false; } } } bool ishas=true; for(int t=0;t<=i;++t) { for(int s=0;s<j;++s) if(num[t][s]==1) ishas=false; } if(ishas) { if(step<=0) cout<<-1<<endl; else cout<<step<<endl; } else cout<<-1<<endl; return 0; }
#笔试题目##春招#