| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大家帮我看看哪里错了把,,谢了#include <iostream>
#include <stack>
#include <queue>
using namespace std;
typedef struct{
int pre;
int change;
}RECORD;
void PrintResult(int x,int root,RECORD record[]){
int step=1;
while (record[x].pre!=root){
//cout <<"x="<<x<<" pre"<<record[x].pre<<" change"<<record[x].change<<endl;
step++;
x=record[x].pre;
}
//cout <<"x="<<x<<" pre"<<record[x].pre<<" change"<<record[x].change<<endl;
if (step<3 || step>5) cout <<"Impossible"<<endl;
else cout <<step<<endl;
}
void bfs(queue<int> Q, bool checked[],RECORD record[]){
int s[16]={51200,58368,29184,12544,35968,20032,10016,4880,2248,1252,626,305,140,78,39,19};
int root=Q.front();
int x,i,newX;
while(!Q.empty()){
int x=Q.front();
Q.pop();
if(!checked[x]){
//cout <<"x="<<x<<endl;
for (i=0;i<=15;i++){
newX=x^s[i];
//cout <<" "<<i<<"newx="<<newX<<endl;
if (!checked[newX]){
record[newX].pre=x;
record[newX].change=i;
}
if (newX==0||(newX==65535)){
PrintResult(newX,root,record);
return;
}
else{
Q.push(newX);
}
}
checked[x]=true;
}
}
}
int main(){
queue<int> Q;
bool checked[65537];
RECORD record[65537];
int i;
unsigned int curr;
char c;
curr=0;
for (i=0;i<65537;i++) checked[i]=false;
for (i=15;i>=0;i--){
cin >>c;
if (c=='w') curr=curr|(1<<i);
else curr=curr|(0<<i);
//cout <<curr<<endl;
}
Q.push(curr);
if (curr!=0 && (curr!=65535)) bfs(Q, checked,record);
else cout <<"0"<<endl;
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator