n皇后问题和罗马尼亚问题实习报告

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
包括所有可达顶点的深度优先树。
在深度优先搜索中,
2.3
深度优先
ArAil Si^iu R j.nr> uU il<!« a
Apdil Sibiu RlnnicuUilcea Pit est i
3.
3.1
队列(BFS贪婪,A*公用)
typ edef struct
{
int queue[MaxSize];
算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产 生整体最优解或者是整体最优解的近似解。
在解决罗马尼亚度假问题时,贪婪算法通过比较每个待扩展结点的h值,即 启发函数生成的到目标结点的启发函数值, 选取一个最小的,来确定当前要扩展 的结点,并将生成的结点放进fringe结点表。
在贪婪算法中,我用到队列存储待扩展结点表。
指导老师:赵曼
2014.11
人工智能课程实习报告
罗马尼亚冋题
、问题描述
二、图的数据结构
三、实现算法
1.宽度优先........
1.1数据结构:
1.2算法思想:
1.3运行结果:
2.深度优先........
2.1数据结构:
2.2算法思想:
2.3运行结果:
3.贪婪算法........
3.1数据结构:
3.2算法思想:
同样,深度优先搜索从Arad结点出发,判断是否为目标结点,若否,探寻 与该结点相连的结点,算法首先搜索一条分支上的所有顶点,然后再去搜索和Arad的其它分支结点,找出并存进待扩展结点表,等待扩展,每次先判断待扩 展结点表是否为空,若否,则从待扩展结点表中取出一个结点进行扩展,并将扩
展后的结点存进该表,若是,则返回失败。该算法同时能生成一棵根为Arad且
int rear;
int front;
int count;
} SeqCQue ne;
队列操作:
void Queuel nitiate(SeqCQue ne *Q)
int QueueNotE mp ty(SeqCQue ne Qj
int QueueDelete(SeqCQue ne *Q,i nt *d);

2.
2.1
堆栈
typ edef struct
{
int a[100];//记录入栈城市序号
int topi;//栈顶
int weight;//最大路径用于剪枝
}Stack;
2.2
深度优先搜索是一种每次都要达到被搜索结构的叶结点的搜索方法,直到
不能再深入为止,然后返回到另一个结点,继续对该结点进行深搜。当有目标结 点出现时,返回目标结点,搜索结束;否则,若待扩展结点表已空,且未找到目 标结点,则返回失败,停止搜索。
3.3运行结果:
4.A*算法
4.1数据结构:
4.2算法思想:
4.3运行结果:
四、比较结论
10
N皇后问题
13
一、问题描述:
14
二、数据结构
14
三、实现算法
14
1、回溯法
1.1数据结构:
1.2算法思想:
1.3运行结果:..
2、遗传算法........
2.1数据结构:
2.2算法思想:
2.3运行结果...
3、CSP最小冲突法
int GetFirstV(Graph G,int v) //取节点v的第一个子节点
int GetNextV(Graph G,int v1,int v2); //取节点v1子节点v2后的第一个子节点
、实现算法
1.
1.1
队列(BFS贪婪,A*公用)
typ edef struct
{
int queue[MaxSize];
int QueueOrderAppend(SeqCQuene *Q,int x,Graph Q)/h越小优先级越高记录父亲用于打印路径
typ edef struct
{
int father; int me;
}way;
3.2
贪婪算法是指,在对问题求解时,总是做出在当前看来是最好的选择。贪婪 算法不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。贪婪
int rear;
int front;
int count;
} SeqCQue ne;
队列操作:
void QueueI nitiate(SeqCQue ne *Q)
int QueueNotE mp ty(SeqCQue ne Qj
int QueueDelete(SeqCQue ne *Q,i nt *d);
题”。要求:分别用文件存储地图和启发函数表,用生成节点数比较几种算 法在问题求解时的效率,列表给出结果。
(2)附(罗马尼亚地图)
Ar^id
366
MehndLi
24i
BDcharesl0Fra bibliotekNeninf
234
Craiovu
160
3S0I
Dobretn
242
rheeti
Efoie
i6i
RJmnKii Vik«a
(2)地图信息
typ edef struct
{
Ver V[MaxV];//一维城市数组
int edge[MaxV][MaxV];//二维边数组
int num ofedges;
}Grap h;
(3)图的操作函数
void Read_V(Graph &G;//从文件读取顶点信息
void Read_edge(Graph &G)〃从文件读取边的信息
14
14
14
15
15
15
15
16
16
3.2算法思想:
3.3运行结果:
16
17
四、比较结论
17
总结
18
附源代码
18
罗马尼亚问题...
N皇后问题
递归算法
遗传算法
csp最小冲突法
18
29
29
32
37
罗马尼
问题描述
(1)罗马尼亚问题:Find Bucharest starti ng at Arad
分别用宽度优先、深度优先、贪婪算法和A*算法求解“罗马利亚度假问
i9i
176
snmi
253
Gnughi
7?
Timfemra
32?
Hiraivn
15i
Urzic^in
216
Vndiii
IW
244
Zerind
374
二、图的数据结构
(1)节点信息:
typ edef struct
{
char cit yn ame[20];
int value; int cost;
}Ver;
int QueueAppend(SeqCQuene *Q,int x)//先进先出(BFS
记录父亲用于打印路径
typ edef struct
{
int father;
int me;
}way;
1.2

顶点,然后再去搜索和
点表,等待扩展,每次先判断待扩展结点表是否为空,若否则从待扩展结 点表中取出一个结点进行扩展,并将扩展后的结点存进该表,若是,则返 回失败。该算法同时能生成一棵根为
相关文档
最新文档