一道趣题

来源:互联网 发布:客户数据分析报告 编辑:程序博客网 时间:2024/05/16 14:22

51cto写到一半打不开了。。。。。到csdn上写

题目是:“迷宫”题:从图左边入口处的2011进去,在迷宫里转悠,最后变成2012从右边出来。可以在迷宫里转圈,可以重复之前走过的路,但不能回退。


代码很乱

下面是运行效果和代码,计算是从下往上依次计算,回溯就没调整顺序了,从下往上啊!


// funny.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>#include <cstdlib>using namespace std;struct node{int stat;double num;int parent;};double eps=0.00000000001;node queue[10000000];int l=0,r=1;void backforanswer(int k){while (queue[k].parent!=-1){if (queue[k].num/queue[queue[k].parent].num==3){cout<<"*3"<<endl;} elseif (queue[k].num-queue[queue[k].parent].num==7){cout<<"+7"<<endl;} elseif (queue[k].num-queue[queue[k].parent].num==-5){cout<<"-5"<<endl;} elseif (queue[queue[k].parent].num/queue[k].num==2){cout<<"/2"<<endl;}    k=queue[k].parent;}}void bfs(){node now;bool flag=true;while (flag){now=queue[l];l+=1;switch(now.stat){case 0: queue[r].stat=2;queue[r].parent=l-1;queue[r].num=now.num+7;r+=1;   if (int(now.num) % 2 ==0){queue[r].stat=4;queue[r].parent=l-1;queue[r].num=now.num/2.0;r+=1;}   break;case 1:  if (int(now.num) % 2 ==0) {queue[r].stat=4;queue[r].parent=l-1;queue[r].num=now.num/2.0;r+=1;}break;case 2:  if (now.num<1000000){queue[r].stat=7;queue[r].parent=l-1;queue[r].num=now.num*3;r+=1;} queue[r].stat=8;queue[r].parent=l-1;queue[r].num=now.num-5;r+=1; if (int(now.num) % 2 ==0){ queue[r].stat=3;queue[r].parent=l-1;queue[r].num=now.num/2.0;r+=1;} break;case 3:   queue[r].stat=2;queue[r].parent=l-1;queue[r].num=now.num+7;r+=1;      break;case 4:  if (now.num<1000000){ queue[r].stat=7;queue[r].parent=l-1;queue[r].num=now.num*3;r+=1;} queue[r].stat=8;queue[r].parent=l-1;queue[r].num=now.num-5;r+=1; queue[r].stat=1;queue[r].parent=l-1;queue[r].num=now.num+7;r+=1; break;case 5:   queue[r].stat=1;queue[r].parent=l-1;queue[r].num=now.num+7;r+=1;queue[r].stat=8;queue[r].parent=l-1;queue[r].num=now.num-5;r+=1;if (int(now.num) % 2 ==0){  queue[r].stat=3;queue[r].parent=l-1;queue[r].num=now.num/2.0;r+=1; }break;case 6: queue[r].stat=1;queue[r].parent=l-1;queue[r].num=now.num+7;r+=1;if (int(now.num) % 2 ==0){    queue[r].stat=3;queue[r].parent=l-1;queue[r].num=now.num/2.0;r+=1;}if (now.num<1000000){ queue[r].stat=7;queue[r].parent=l-1;queue[r].num=now.num*3;r+=1;}break;case 7: if (int(now.num)==2012) {flag=false;backforanswer(l-1);break;} else{queue[r].stat=6;queue[r].parent=l-1;queue[r].num=now.num-5;r+=1;    }break;case 8: if  (int(now.num)==2012){flag=false;backforanswer(l-1);break;} else{if (now.num<1000000){ queue[r].stat=5;queue[r].parent=l-1;queue[r].num=now.num*3;r+=1;  }  }break;case 9: break;}} }int main(){queue[0].stat=0;queue[0].num=2011;queue[0].parent=-1;bfs();return 0;}


原创粉丝点击