摘要: 题目描述;数独游戏的内核代码八数码问题;编号为1到8的8个正方形滑块被摆成3行3列;(有一个格子留空);每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中;而它原来的位置就成为了新的空格;给定初始局面和目标局面(用0表示空格);你的任务死计算出最少的移动步数;和移动过程;如果无法到达目标局面,则输出-1;------------------------------------------------------------------------------接前面两个博客,在这个博客里,我们尝试改变我们使用的判重的数据结构;在第一个博客里我们用的是数组,也就是顺序结构,速度非常的慢,在第 阅读全文
posted @ 2013-03-24 20:22 在河之博 阅读(800) 评论(2) 推荐(0) 编辑
摘要: 题目描述;数独游戏的内核模拟八数码问题;编号为1到8的8个正方形滑块被摆成3行3列;(有一个格子留空);每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中;而它原来的位置就成为了新的空格;给定初始局面和目标局面(用0表示空格);你的任务死计算出最少的移动步数;和移动过程;如果无法到达目标局面,则输出-1;在这节里我们使用c++封装的stl库里面的set类库来帮助我们进行判断是否访问过的操作;这里用vis.count(s)的返回值来判断s是否在栈里面用vis.insert(s)将s插入到vis里面; 1 #include <iostream> 2 #include <fs 阅读全文
posted @ 2013-03-24 20:07 在河之博 阅读(551) 评论(0) 推荐(0) 编辑
摘要: 题目描述;数独游戏的内核模拟八数码问题;编号为1到8的8个正方形滑块被摆成3行3列;(有一个格子留空);每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中;而它原来的位置就成为了新的空格;给定初始局面和目标局面(用0表示空格);你的任务死计算出最少的移动步数;和移动过程;如果无法到达目标局面,则输出-1;2641375881273642这个问题也是要分步骤实现的,自然也涉及到状态的问题,和我的前一篇博客一样,使用的是广度优先遍历这样可以找到最少的步数;众所周知的是BFS算法之于树和之于图是不太一样的,因为树一旦往下走便不必担心访问到已经访问过的结点,而图呢由于有环的存在,所以会回到之前访 阅读全文
posted @ 2013-03-24 19:51 在河之博 阅读(1532) 评论(0) 推荐(0) 编辑
摘要: 倒水问题: 引例:有装满水的6升的杯子,空的3升杯子和1升杯子,3个杯子都没有刻度; 在不使用道具的情况下,如何称出4升的水呢?相信聪明的你已经算出来了; (6,0,0)->(3,3,0)->(3,2,1)->(4,3,0);现在你的任务是解决一个一般性的问题: 设有大中小3个杯子的容量分别是a,b,c最初只有大杯子装满水,其他两个杯子为空;最少需要多少步才能让某一个杯子中的谁有x升呢? 你需要打印出每次操作后各个杯子中的水量(0<c<b<a<1000);输入:三个杯子的容积a,b,c然后是要称出的水量d;(d<=c);输出:操作的次数,每一次操 阅读全文
posted @ 2013-03-23 23:55 在河之博 阅读(2509) 评论(0) 推荐(2) 编辑
摘要: 1 #include //双向循环链表 2 #include 3 #include 4 using namespace std; 5 int main() 6 { 7 list L; 8 L.push_back(2); 9 L.push_back(1);10 L.push_back(5);11 //尾部元素扩张12 L.push_front(8);13 //头部元素扩张14 list::iterator it;15 it=L.begin();16 L.insert(++it,2);//中间插入;17 for(it=L.begin();it!=L... 阅读全文
posted @ 2013-02-11 12:50 在河之博 阅读(1175) 评论(0) 推荐(2) 编辑
摘要: #include //包含了set类#include #include using namespace std;struct Info{ string name; float score; bool operator(const Info &a)const// greater模版需要写上这个操作符重载 { return score>a.score;//保证了按score降序排列 } bool operator==(const Info &d)const//find会用==操作符重载进行比较 { return score==d.score; }};int main(... 阅读全文
posted @ 2013-02-09 12:59 在河之博 阅读(1205) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include //大概是字符串流 3 #include 4 using namespace std; 5 6 //c++方法 将double数值 转换成string对象 7 string convertToString(double x) 8 { 9 ostringstream o;10 if(o>x)//很像c语言里面的sscanf 从流中第一个字符开始分流出一个double22 return x;23 else24 return 0.0;25 }26 int main()27 {28 string a,e;29 c... 阅读全文
posted @ 2013-02-08 11:31 在河之博 阅读(427) 评论(0) 推荐(0) 编辑
摘要: #include //包含string类#include #include #include #include //#include //字符串流using namespace std;int main(){ string a,b; char c[10]="拜拜"; a="ab c";//把c字符串赋值给string对象 a.append(c);//把字符或者字符串 追加到string对象的最后 很像vetor的push_back()方法; b+=a+c; cout v; v.push_back(c); v.push_back(a); cout<& 阅读全文
posted @ 2013-02-08 10:35 在河之博 阅读(1441) 评论(4) 推荐(1) 编辑
摘要: 1 #include //包含cin cout 2 #include //包含向量 vector 3 #include //包含算法 accumulate 4 #include //包括stl的很多算法 5 #include 6 using namespace std; 7 bool cmp(const int &a,const int &b)//这里参数类型要是const型的 8 { 9 if(a!=b)//这里判断的意思就是说 如果a>b 结果就为真 否则就为假10 return a>b;11 else12 return a>b;13 }14 int ma 阅读全文
posted @ 2013-02-07 11:53 在河之博 阅读(1354) 评论(4) 推荐(1) 编辑