折纸SEO SEO优化 算法设计问题

算法设计问题

现有n个城市,城市间均有高速公路直达,某一旅行者,从某城市出发,到每个城市进行旅行,最后返回原城市,要求每个城…

算法设计问题

现有n个城市,城市间均有高速公路直达,某一旅行者,从某城市出发,到每个城市进行旅行,最后返回原城市,要求每个城市到达且仅到达一次。请设计一算法,输入n、城市间的交通费用及原城市,输出费用最省的旅行线路。

这个问题就是金典的“城市遍历”问题,您可以百度下,相关东西很多,提示;
1:当城市数量较小时可以使用for循环进行遍历查找,判断
2:当城市数量较大时建议使用模拟退火算法,效率不比Google的搜索低,我测试过,当城市为200时,时间约为0.02s左右,但是使用for的话就死机了。

代码已经给你发到邮箱了。

C语言课程设计:查找算法设计

折半查找
#include <stdio.h>
#define N 51
void main(void)
{
int a[N];
int i,n,num;
int top,bottom,mid;
int flag=1; //如果在表列中找到数字,则值为1,否则为0
int loc=-1;//要查找的数在表列中的位置,如果loca=-1表示表列中没有这个数;如果有这个数,则它的值为所在的位置

printf(“你想在多少个数中进行折半查找,请输入(1–50):”);
scanf(“%d”,&n);

while(n<1 || n>50)
{
printf(“你输入的数不正确,请重新输入。\n”);
printf(“你想在多少个数中进行折半查找,请输入(1–50):”);
scanf(“%d”,&n);
}

printf(“请你输入一个整数 a[1](需保证递增有序):”);
scanf(“%d”,&a[1]);

i=2;
while(i<=n) //输入从小到大的表列
{
printf(“请你输入一个整数 a[%d](需保证递增有序):”,i);
scanf(“%d”,&a[i]);
if(a[i] > a[i-1])
i++;
else
printf(“你输入的数不满足要求,请重新输入。\n”);
}

//输出表列
printf(“\n输出表列\n”);
for(i=1; i<=n; i++)
{
printf(“%6d”,a[i]);
}
printf(“\n”);

printf(“请你输入要查找的数:”);
scanf(“%d”,&num);

flag=1; //假设输入的数在表列中

top=n;
bottom=1;
mid=(top+bottom)/2;

while(flag)
{

//printf(“top=%d, bottom=%d, mid=%d, a[%d]=%d\n”,top,bottom,mid,mid,a[mid]);

if( (num>a[top]) || (num<a[bottom]) ) //输入的数 num>a[top] 或者 num<a[bottom],肯定num不在这个表列中
{
loc=-1;
flag=0;
}
else if(a[mid]==num) //如果num 等于找到的数
{
loc=mid;
printf(“找到数 %6d 的位置%2d\n”,num,loc);
break;
}
else if(a[mid]>num) //若 a[mid]>num,则num 一定在 a[bottom]和a[mid-1]范围之内
{
top=mid-1;
mid=(top+bottom)/2;
}
else if(a[mid]<num) //若 a[mid]<num,则num 一定在 a[mid+1]和a[top]范围之内
{
bottom=mid+1;
mid=(top+bottom)/2;
}
}

if(loc==-1)
{
printf(“%d 这个数在表列中没有找到。\n”,num);
}
printf(“折半查找结束,按任意键退出:\n”);

}

本文来自网络,不代表折纸SEO立场,转载请注明出处:https://www.30th-feb.com/4630

作者: DAR_KING

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

在线咨询: QQ交谈

邮箱: luckiestmjt@163.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部