自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(0)
  • 资源 (6)
  • 收藏
  • 关注

空空如也

迷宫问题代码(算法详解)

*问题描述:一个网格迷宫由n行m列的单元格组成,每个单元格要么是空地(用1表示), * 要么是障碍物(用0 表示)。找出从起点到终点的最短移动序列,其中U,D,L,R, * 分别代表往上,下,左,右移动到相邻单元格。任何时候都不能在障碍格中, * 也不能走到迷宫之外,起点和终点保证是空地。n,m<=100. * *分析: 可以使用bfs,节点的访问顺序恰好是它们从根节点距离从小到大的顺序。类 * 似的,也可以用bfs来按照起点的距离顺序遍历迷宫图。不断沿着父亲指针走, * 保存方向序列dir,最后反向输出。 * 比深度优化的效率要高很多,因为每次都定义了活结点还有下一个扩展节点, * 在活结点当中去寻找扩展节点,不会盲目的搜索到底,而是有一定的选择性。 * 因此我们可以定义记录扩展节点的数组,并且定义函数来判断,看下一层将要 * 被搜索的节点是不是能够作为扩展节点。这就运用到了分支限界的知识。 *

2011-06-14

汽车加油问题详细解析及代码

/*问题描述:一辆汽车加满油后可行驶nkm ,旅途中有若干个加油站,设计一个有效的算法, * 指出应在哪些加油站停靠加油,使沿途加油次数最少。 *算法设计:对于给定的n和k个加油站位置,计算最少加油次数。 * 数据输入;由文件input.txt给出输入数据。第一行有2个正整数n和k, * 表示汽车加油后可以行驶的nkm,且旅途中有k个加油站, * 接下来的一行中有k+1个整数,表示第k个加油站与k-1个加油站之间的距离, * 第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地, *结果输出:将计算的最少加油次数输出到文件output.txt * 如果无法到达目的地则输出”no solution“. * 输入文件示例: 输出文件示例: * input.txt output.txt * 7 7 4 * 1 2 3 4 5 1 6 6 部分代码: void greedy(int d[],int n,int k) { int num = 0; int i=0; int s=0; for( i = 0;i n) { //当任意的两个加油站之间的距离大于了汽车的最大行驶距离N cout<<"no solution\n"<<endl; return; } } for( i = 0,s = 0;i n) { num++; s = d[i]; cout<<"加油的站点为: "<<i<<endl<<endl; } cout<<"s="<<s<<" "; cout<<"number="<<num<<endl<<endl; } cout<<"最终加油次数为:"<<num<<endl; } /* 运行结果: * 请输入汽车可行驶: * 7 * * 加油站的个数: * 7 * * 请输入各个站点之间的距离 * * 第0到1站点的距离为: * 1 * 第1到2站点的距离为: * 2 * 第2到3站点的距离为: * 3 * 第3到4站点的距离为: * 4 * 第4到5站点的距离为: * 5 * 第5到6站点的距离为: * 1 * 第6到7站点的距离为: * 6 * 第7到8站点的距离为: * 6 * s=1 number=0 * * s=3 number=0 * * s=6 number=0 * * 加油的站点为: 3 * * s=4 number=1 * * 加油的站点为: 4 * * s=5 number=2 * * s=6 number=2 * * 加油的站点为: 6 * * s=6 number=3 * * 加油的站点为: 7 * * s=6 number=4 * * 最终加油次数为:4 * 请按任意键继续. . . * *

2011-06-07

动态规划—最短编辑问题—(非常详细分析以及代码)

*问题描述:设A 和B 是2 个字符串。要用最少的字符操作将字符串A 转换为字符串B。 * 这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; * (3)将一个字符改为另一个字符。将字符串A变换为字符串B 所用的最少 * 字符操作数称为字符串A到B 的编辑距离,记为 d(A,B)。试设计一个有效 * 算法,对任给的2 个字符串A和B,计算出它们的编辑距离d(A,B)。 * 例如: * 输入第一个字符串: * shao * 输入第二个字符串: * shaod * 最短编辑距离 * 1 (2)本题思路分析 * 定义两个字符串s1 ,s2 * 比较两字符串的某两个相同位置时:(例如s1[i] s2[j] 这时i=j)有三种办法 * 1.把字符ch1变成ch2, 使得s1与s2字符串在该处相同 * 2.删除s1当中的该字符ch1,使得s1与s2字符串在该处相同 * 3.插入某个字符ch2,使得s1与s2字符串在该处相同 运行结果: * 请输入字符串1 * shao * 请输入字符串2 * sha1 * d[1][1]= 0 d[1][2]= 1 d[1][3]= 2 d[1][4]= 3 * * d[2][1]= 1 d[2][2]= 0 d[2][3]= 1 d[2][4]= 2 * * d[3][1]= 2 d[3][2]= 1 d[3][3]= 0 d[3][4]= 1 * * d[4][1]= 3 d[4][2]= 2 d[4][3]= 1 d[4][4]= 1 * * 最短编辑距离为: 1 * 请按任意键继续. . .

2011-06-07

分治法求枚举排序(包含详细解答及分析)

输入n个数,按照字典序从小到大的顺序输出前n个数的所有排列。 核心代码: void print_permutation(int n, int*a,int cur) { int i,j; if(cur==n) //当存入的数组a的数量到达n时,这时候就可以输出 { for(i = 0 ; i < n; i++) printf("%d \t",a[i]); printf("\n"); } else { for(i = 1; i <= n; i++) //循环变量i是考察当前a[cur],检查i是否在之前被用过 { int ok=1; for(j = 0; j < cur ;j++ )//检查cur之前的几位,看是否有与cur相同的项。 if(a[j]==i) ok=0; if(ok) { a[cur] = i; //如果i没有出现在cur之前的几位,那么将cur插入到数组中 print_permutation(n,a,cur+1);//递归调用 } } } } 运行结果: please input a number 3 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 请按任意键继续. . .

2011-06-06

N皇后问题的代码(包含代码分析,能够正确运行)

解答内容的一部分 /* * cur-c[cur]==j-c[j]||cur+c[cur]==j+c[j]用来判定是否同斜对角线。 * 在数组当中令x代表行,y 代表列,那么y-x代表行与列的差值 * * * y y y y y y y y * --------------------------- * x | 0 1 2 3 4 5 6 7 * x | -1 0 1 2 3 4 5 6 * x | -2 -1 0 1 2 3 4 5 * x | -3 -2 -1 0 1 2 3 4 * x | -4 -3--2 -1 0 1 2 3 * x | -5 -4 -3 -2 -1 0 1 2 * x | -6 -5 -4 -3 -2 -1 0 1 * x | -7 -6 -5 -4 -3 -2 -1 0 * *

2011-06-06

C#软件项目开发全程剖析

全面透视sharp develop软件的开发内幕。展示了.NET高级技巧,告诉读者如何从头到尾的实现各种界面和功能的开发。国外作者编著,由清华大学出版。

2011-06-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除