文档详情

2016西安交通大学人工智能实验报告.docx

发布:2017-03-18约1.15万字共18页下载文档
文本预览下载声明
人工智能实验报告西安交通大学实验一:货郎担问题一、问题重述假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路经的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。二、问题分析如果只考虑贪心算法,由于在最后需要回到原来的出发点,很难得到最后的最有结果,所以需要全方面地考虑到各种情况。本实验由于考虑的村庄的总数量不是很多,可以采取枚举算法。枚举所有的状况,进而做出比较,可得到全局的最优解。三、程序设计程序可以采用sort和work两个函数进行具体的计算,主函数主要用来编辑界面,使得最终的结果比较可视化。首先,定义dis矩阵作为距离矩阵,定义way数组为路程记录。对主函数的操作:1.输出如下编辑的运行界面:cout ================货郎担问题的解法================endlendlendl; cout 1 ---------------输入数据---------------endl; cout 2 ---------------输出原始数据-----------endl; cout 3 ---------------解决问题---------------endl; cout 4 ---------------输出最终结果-----------endl; cout 0 ---------------退出系统---------------endlendl; cout请选择相应序号:endl; 2.在输入数据选项中,将各个村庄自己和自己之间的值设为0,再设置a村庄与b村庄之间的距离和b村庄和a村庄之间的距离相同。其他数据依靠外部输入。3.在输出原始数据选项中,用矩阵的方式做一次确认。4.在解决问题选项中,调用work函数。5.在输出最终结果选项中,用cout进行way的输出。对work函数的操作:调用sort函数,列出所有的路径情况,求出最小值。对sort函数的操作:完成一个范围内的从小到大排列。四、程序运行结果 先初始化各个数据,在这里假设一共有五个村庄,设定每个村庄之间的距离,以及出发的村庄编号。 输入的各数据显示如下: 输出最后的数据结果(行动方案)如下:五、源代码// seller.cpp : 定义控制台应用程序的入口点。#include stdafx.h#include iostream#include stdlib.h using namespace std;#define numOfVill 5 //常量定义,设置一共有5个村庄//全局变量定义int dis[numOfVill][numOfVill]; //定义各个村庄之间的距离矩阵int Way[numOfVill]; void Sort(int a[],int low,int up);int Work(int a[],int n,int b);int main( ){ int m,s,i,j,v[numOfVill],k; int n=numOfVill;while(1) { cout ================货郎担问题的解法================endlendlendl; cout 1 ---------------输入数据---------------endl; cout 2 ---------------输出原始数据-----------endl; cout 3 ---------------解决问题---------------endl; cout 4 ---------------输出最终结果-----------endl; cout 0 ---------------退出系统---------------endlendl; cout请选择相应序号:endl; cink;coutendl;switch(k) { case 1: { for(i=0;in;i++) v[i]=i; cout请输入出发村庄的编号: ; cinm; m=m-1;getchar(); for(i=m;in-1;i++) v[i]=v[i+1]; //将选中的村庄之后的村庄位置前移//设置距离矩阵coutendl请输入各个村庄之间的距离数据:endl; for(i=0;in;i++){dis[i][i]=0;//村庄自己和自己之间的距离为0}for(i=0;in;i++) for(j=i+1;jn;j++) { cout村庄i+1与村庄j+1的距离: ;cindis[i][j]; dis[j][i]=dis[i][j];//a到b的距离和b到a的距离相同} cout输入完毕!endl; system(pause); system(cls);break;
显示全部
相似文档