一道趣题
来源:互联网 发布:客户数据分析报告 编辑:程序博客网 时间: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;}
- 一道趣题
- 一道趣题
- 一道趣题(数学)
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- windows Phone 8 (5)
- matlab数值积分实现(时域&频域积分)
- VC++编写ActiveX控件 (学习)
- java中几种后台验证小例子(日期、Email、电话等)
- sina认证的scope参数
- 一道趣题
- windows Phone 8 (6)
- hdu4461
- 按长度分割字符串
- __attribute__ ((packed))详解
- windows Phone 8 (7)
- JAVA(三)
- bash 常用的基本常识
- Oracle字符集的查看查询和Oracle字符集的设置修改