文档介绍:算法设计与分析实验报告实验名称_____ 回溯算法_____ 学院________ 数学与计算机学院____ 班级_______ 信科 00000 ___________ 学号_______ 6666666666 __________ 姓名_____ 000000 ________________ 2016 年月日学号姓名实验日期实验名称回溯算法【实验目的】理解回溯算法的思想,能灵活利用回溯算法解决实际计算问题。【实验内容】参考源码 3mColoring .cpp, 6TSP .cpp ,理解回溯算法对解空间的组织和收索; 6TSP .cpp 算法进一步理解回溯算法的思想及代码框架结构; 。【实验原理】(含相关算法流程图,可写多页) //算 24 点问题输入只有一行,四个 1到9 之间的自然数。输出如果有解的话,只要输出一个解,输出的是三行数据,分别表示运算的步骤。其中第一行是输入的两个数和一个运算符和运算后的结果,第二行是第一行的结果和一个输入的数据、运算符、运算后的结果; 第三行是第二行的结果和输入的一个数、运算符和“=24 ”。如果两个操作数有大小的话则先输出大的。编程: #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <queue> #include <algorithm> using namespace std; bool flag; int num[4]; struct node { int a,b,sum;//sum 存放 a,b 经过 oper 运算之后的值 char oper; }; void dfs(int cur,int a,int b,queue <node> route) { if(flag) return ; if(cur==3)// 计算收尾{ if(((a+b)==24)||((a-b)==24)||((a*b)==24)||(b!=0&&a%b==0&&a/b==24)){// 如果经过上面的计算得到解 while(!()){ node now=(); printf("%d%c%d=%d\n",,,,);// 依次输出前面的计算过程 (); } if((a+b)==24){ if(b>a) swap(a,b); printf("%d+%d=%d\n",a,b,a+b); } if((a-b)==24) printf("%d-%d=%d\n",a,b,a-b); if((a*b)==24) { if(b>a) swap(a,b); printf("%d*%d=%d\n",a,b,a*b); } if(a%b==0&&b!=0&&(a/b)==24) printf("%d/%d=%d\n",a,b,a/b);//a/b 比较特殊,要求结果必须是整数 flag=true;// 表示找到解,一旦找到任何一个解就退出} return ;} queue <node> temp=route; node x; =a,