货郎担问题的C语言解法

#define N 5

#include

#include

int d[N][N];

int Way[N];

void Sort(int a[],int low,int up)//排序

{

int i,j,k,t;

for(i=low+1;i

for(j=low;j

if(a[j]>a[i])

{

t=a[i];

for(k=i;k>j;k--) a[k]=a[k-1];

a[j]=t;

break;

}

}

int Work(int a[],int n,int b)//解决问题

{

int i,j,k,t,cost,min;

cost=0;min=0;

long s,count;

Sort(a,0,n-1);

min+=d[b][a[0]];

for(i=0;i

min+=d[a[i]][b];

for(i=0;i

s=1;

for(i=1;i

for(count=2;count

{

j=n-1;

while(a[j-1]>a[j]) j--;

k=j; a[k]=a[j];

for(i=j+1;i

if(a[k]>a[i]&&a[i]>a[j-1])

{k=i;a[k]=a[i];}

t=a[k];a[k]=a[j-1];a[j-1]=t;

Sort(a,j,n-1);

cost+=d[b][a[0]];

for(i=0;i

cost+=d[a[i]][b];

if(cost

{

min=cost;

for(i=0;i

}

cost=0;

}

return min;

}

void main()//主函数

{

int a,n=N,s,i,j,v[N],k;

while(1)

{

printf(" =================货郎担问题的穷举解法=================\n\n\n");

printf(" 1 ---------------输入数据---------------\n");

printf(" 2 ---------------输出原始数据---------------\n");

printf(" 3 ---------------解决问题---------------\n");

printf(" 4 ---------------输出最终结果---------------\n");

printf(" 0 ---------------退出系统---------------\n\n");

printf("请选择相应序号:");

scanf("%d",&k);

printf("\n");

switch(k)

{

case 1:

{

for(i=0;i

v[i]=i;

printf("请输入出发村庄的编号(从1——%d)",n);

scanf("%d",&a);

a=a-1;

getchar();

for(i=a;i

v[i]=v[i+1];

printf("\n请输入各个城市之间的距离数据:(共有 %d 个城市,%d 个数据)\n",n,n*n);

for(i=0;i

for(j=0;j

{

scanf("%d",&d[i][j]);

}

printf("输入完毕!\n");

system("pause");

system("cls");break;

}

case 2:

{

printf("输入各个村庄的距离如下:\n");

for(i=0;i

{

for(j=0;j

printf("%3d",d[i][j]);

printf("\n");

}

system("pause");

system("cls");break;

}

case 3:

{

s=Work(v,n-1,a);

printf("问题解决完毕!\n");

system("pause");

system("cls");

break;

}

case 4:

{

printf("最短路径为\n%d ",a+1);

for(i=0;i

printf("%d\n",a+1);

printf("最小值为 %d\n",s);

system("pause");

system("cls");break;

}

case 0:

{

printf("\n谢谢使用!\n");

exit(0);break;

}

default:{

printf("对不起,您的输入有误。。。。\n");

system("pause");

system("cls");

}

}

}

}

#define N 5

#include

#include

int d[N][N];

int Way[N];

void Sort(int a[],int low,int up)//排序

{

int i,j,k,t;

for(i=low+1;i

for(j=low;j

if(a[j]>a[i])

{

t=a[i];

for(k=i;k>j;k--) a[k]=a[k-1];

a[j]=t;

break;

}

}

int Work(int a[],int n,int b)//解决问题

{

int i,j,k,t,cost,min;

cost=0;min=0;

long s,count;

Sort(a,0,n-1);

min+=d[b][a[0]];

for(i=0;i

min+=d[a[i]][b];

for(i=0;i

s=1;

for(i=1;i

for(count=2;count

{

j=n-1;

while(a[j-1]>a[j]) j--;

k=j; a[k]=a[j];

for(i=j+1;i

if(a[k]>a[i]&&a[i]>a[j-1])

{k=i;a[k]=a[i];}

t=a[k];a[k]=a[j-1];a[j-1]=t;

Sort(a,j,n-1);

cost+=d[b][a[0]];

for(i=0;i

cost+=d[a[i]][b];

if(cost

{

min=cost;

for(i=0;i

}

cost=0;

}

return min;

}

void main()//主函数

{

int a,n=N,s,i,j,v[N],k;

while(1)

{

printf(" =================货郎担问题的穷举解法=================\n\n\n");

printf(" 1 ---------------输入数据---------------\n");

printf(" 2 ---------------输出原始数据---------------\n");

printf(" 3 ---------------解决问题---------------\n");

printf(" 4 ---------------输出最终结果---------------\n");

printf(" 0 ---------------退出系统---------------\n\n");

printf("请选择相应序号:");

scanf("%d",&k);

printf("\n");

switch(k)

{

case 1:

{

for(i=0;i

v[i]=i;

printf("请输入出发村庄的编号(从1——%d)",n);

scanf("%d",&a);

a=a-1;

getchar();

for(i=a;i

v[i]=v[i+1];

printf("\n请输入各个城市之间的距离数据:(共有 %d 个城市,%d 个数据)\n",n,n*n);

for(i=0;i

for(j=0;j

{

scanf("%d",&d[i][j]);

}

printf("输入完毕!\n");

system("pause");

system("cls");break;

}

case 2:

{

printf("输入各个村庄的距离如下:\n");

for(i=0;i

{

for(j=0;j

printf("%3d",d[i][j]);

printf("\n");

}

system("pause");

system("cls");break;

}

case 3:

{

s=Work(v,n-1,a);

printf("问题解决完毕!\n");

system("pause");

system("cls");

break;

}

case 4:

{

printf("最短路径为\n%d ",a+1);

for(i=0;i

printf("%d\n",a+1);

printf("最小值为 %d\n",s);

system("pause");

system("cls");break;

}

case 0:

{

printf("\n谢谢使用!\n");

exit(0);break;

}

default:{

printf("对不起,您的输入有误。。。。\n");

system("pause");

system("cls");

}

}

}

}


相关文章

  • 运筹学教学大纲
  • 浙江财经学院 运 筹 学 教 学 大 数学与统计学院 计算运筹教研室 纲 目 录 前 言 --------------------------------(2) 第一章 线性规划简介--------------------------(4) ...查看


  • 数学系毕业论文[浅谈数学中的美]
  • 哈尔滨师范大学本科毕业设计(论文) 第I 页 哈尔滨师范大学毕业论文(函授) 浅谈数学中的美 年 级:13届 学 号: 姓 名:颜玉娥 专 业:数学教育 指 导 教 师: 二零一三年四月 院 系 数学系 专 业 数学教育 年 级 xx级数学 ...查看


  • [运筹学]试卷及答案002
  • <运筹学>试卷 一.单项选择题(1⨯5分) 1. 线性规划(以下简称LP) 模型中自由变量可以用两个非负变量之( )代换. A.和 B.差 C.积 D.商 2.LP 原问题的第i 个约束条件是"="型,则对偶 ...查看


  • 比赛项目的排序1
  • 比赛项目的排序 齐汇,陈艳,赵伸极 (浙江师范大学,浙江金华,321004) 摘要 本文根据某个运动比赛的报名情况,合理安排比赛项目顺序,使连续参加两项比赛的运动员人数尽可能的少, 以便运动员恢复体力,发挥正常水平. 问题1.合理安排某个小 ...查看


  • 运筹学上机实验报告
  • JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY <运筹学>上机实验报告 学 院: 计算机工程学院 专 业: 信息管理与信息系统 学 号: 10142131 学生姓名: 指导教师: 徐亚平 完成 ...查看


  • 算法设计与分析论文
  • 贪心算法 --不在贪心中爆发,就在贪心中灭亡 武汉理工大学计算机科学与技术学院班 摘要 本文介绍贪心算法的基本意义以及算法的使用范围,并通过具体的案例来分析贪心算法的具体应用,从而指出其特点和存在问题. 关键字:贪心算法,贪心策略,TSP. ...查看


  • 16秋天大[运筹学]在线作业二辅导资料
  • <运筹学>在线作业二 一.单选题(共 40 道试题,共 100 分.) 1. 分类法是对库存的物品采用按( )分类的 . 物品质量 . 物品价格 . 物品数量 . 物品产地 正确答案: 2. 若图G 中没有平行边,则称图G 为 ...查看


  • 查一路[行走的风景]阅读答案
  • 行走的风景 查一路 ①在商品琳琅满目的大街上,我会常常想起货郎.一条黝黑发亮的扁担,一面像小姑娘摇着发辫的手摇鼓,一副光亮的货架--货郎的足迹已远,而我追逐着那激越的鼓点,从一个孩童进入了成年.像消失在乡村田野上的风,像一块钟表停在了过去的 ...查看


  • 货郎担(旅行售货商)动态规划
  • 一,问题由来 货郎担问题也叫旅行商问题,即TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一. 二,问题描述 1)货郎担问题提法:有n个城市,用1,2,-,n表示,城i,j之间的距离为dij,有一个 ...查看


热门内容