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 |
想过个好年!真心请教!究竟哪里Wrong了?? ×-×//BFS!!!!!!!!!!!!!!!!! #include<iostream> using namespace std; class node { public: int opr; node *parent; }; const int MAX=1000000; bool have[101][101]; int queuea[MAX]; int queueb[MAX]; int queues[MAX]; int queueo[MAX]; int op[MAX]; node *queuep[MAX]; int a,b,c; void BFS() { int i,j; //pre judge for(i=1;i<100;++i) { if(a%i==0 && b%i==0 && c%i!=0) { printf("impossible\n"); return; } } int front=0,tail=0; queuea[++tail]=0;//ta queueb[tail]=0;//tb queues[tail]=0;//step queueo[tail]=0;//operation queuep[tail]=NULL;//node int ta,tb,ts,to; node *q; while(front!=tail) { if(front+1 == MAX)front=-1; ta=queuea[++front]; tb=queueb[front]; ts=queues[front]; to=queueo[front]; q=queuep[front]; have[ta][tb]=true; node *p=new node; p->opr=to; p->parent=q; //printf("ta=%d tb=%d ts=%d\n",ta,tb,ts); if(ta==c || tb==c) { printf("%d\n",ts); i=0; while(p->opr!=0) { op[i++]=p->opr; p=p->parent; } for(i=i-1;i>=0;--i) { if(op[i]==1)printf("FILL(1)\n"); else if(op[i]==2)printf("FILL(2)\n"); else if(op[i]==3)printf("POUR(1,2)\n"); else if(op[i]==4)printf("POUR(2,1)\n"); else if(op[i]==5)printf("DROP(1)\n"); else if(op[i]==6)printf("DROP(2)\n"); } return; } //fill(1) if(ta!=a && have[a][tb]==false) { if(tail+1 == MAX)tail=-1; queuea[++tail]=a; queueb[tail]=tb; queues[tail]=ts+1; queueo[tail]=1; queuep[tail]=p; } //fill(2) if(tb!=b && have[ta][b]==false) { if(tail+1 == MAX)tail=-1; queuea[++tail]=ta; queueb[tail]=b; queues[tail]=ts+1; queueo[tail]=2; queuep[tail]=p; } //pour(1,2); int tob=ta+tb; if(tob>b)tob=b; int ra=ta-(b-tb); if(ra<0)ra=0; if(ta!=0 && have[ra][tb]==false) { if(tail+1 == MAX)tail=-1; queuea[++tail]=ra; queueb[tail]=tob; queues[tail]=ts+1; queueo[tail]=3; queuep[tail]=p; } //pour(2,1) int toa=ta+tb; if(toa>a)toa=a; int rb=tb-(a-ta); if(rb<0)rb=0; if(tb!=0 && have[toa][rb]==false) { if(tail+1 == MAX)tail=-1; queuea[++tail]=toa; queueb[tail]=rb; queues[tail]=ts+1; queueo[tail]=4; queuep[tail]=p; } //drop(1) if(ta!=0 && have[0][tb]==false) { if(tail+1 == MAX)tail=-1; queuea[++tail]=0; queueb[tail]=tb; queues[tail]=ts+1; queueo[tail]=5; queuep[tail]=p; } //drop(2) if(tb!=0 && have[ta][0]==false) { if(tail+1 == MAX)tail=-1; queuea[++tail]=ta; queueb[tail]=0; queues[tail]=ts+1; queueo[tail]=6; queuep[tail]=p; } } printf("impossible\n"); } int main() { scanf("%d %d %d",&a,&b,&c); //printf("a=%d b=%d c=%d\n",a,b,c); //return 0; memset(have,false,sizeof(have)); BFS(); /* while(scanf("%d %d %d",&a,&b,&c)) { //printf("a=%d b=%d c=%d\n",a,b,c); //return 0; memset(have,false,sizeof(have)); memset(queuea,false,sizeof(queuea)); memset(queueb,false,sizeof(queueb)); memset(queueo,false,sizeof(queueo)); memset(queuep,false,sizeof(queuep)); BFS(); } */ return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator