首页 > 电脑 > C语言算法分析蛮力法

C语言算法分析蛮力法

电脑 2023-05-11

蛮力法求解旅行商问题 求C++代码

#include
#include
#include
using namespace std;
static double Tmax = 10, Tmin = 0.1, r = 0.999999;
static int k = 100;
inline void random_sele(int &fl, int &fp, int arr[], int n)
{
do
{
fl = rand() % n;
fp = rand() % n;
} while (fl == arr[fp] || arr[fl] == arr[fp]);
};
inline bool accept(double r1, double r2, double T)
{
const unsigned int MASK((1 << 30) - 1);
double p = 1.0 / (1.0 + exp((r2 - r1) / T));
unsigned int temp1=((rand()<<20)^(rand()<<10)^rand())&MASK;
unsigned int temp2=((rand()<<20)^(rand()<<10)^rand())&MASK;
double res=(1.0*temp1+1.0*temp2/MASK);
return res < p*MASK;
}
void set_SA()
{
printf(" Tmax Tmin r k\n");
printf(" %.8f %.8f %.8f %d \n",Tmax,Tmin,r,k);
printf("Input Tmax,Tmin,r,k:\n");
scanf("%lf%lf%lf%d",&Tmax,&Tmin,&r,&k);
}
void TSP_SA(int arr[], double &evl, int n, double map[][2000])
{
double r1, r2, T = Tmax;
int i, fl, sl, fp, sp;
int show_s=0;
srand(11827);
while (T >= Tmin)
{
for (i = 0; i < k; i++)
{
random_sele(fl, fp, arr, n);
sl = arr[fl], sp = arr[fp];
r1 = map[fl][sl] + map[fp][sp] + map[sp][arr[sp]];
r2 = map[fl][sp] + map[sp][sl] + map[fp][arr[sp]];
if (accept(r1, r2, T))
{
arr[fp] = arr[sp];
arr[fl] = sp;
arr[sp] = sl;
sl = sp;
evl = evl + r2 - r1;
}
}
if(++show_s==1000000/k)
{
printf("T=%f evl=%f\n",T,evl);
show_s=0;
}
T *= r;
}
}

求3n+1问题的程序算法

UVa 3n+1 问题 1. 问题描述 编号 :100. 简单描述 : 就是对一个整数 ( 大于等于 1), 不断按照这样的规律进行运算 , 即如果当前数是偶数 , 则下一个数为当前数除以 2, 如果当前数为奇数 , 则下一个数为当前数乘 3 加 1,整个过程直到计算到 1 为止 . 那么形成的数列的长度称为 cycle-length. 问题的输入是 : 给定一个区间 [a,b] 问题的输出为 : 输出给定区间 ( 含端点 ) 所以数的 cycle-length 的最大的 cycle-length. 详细描述可参见 这里 . 2. 问题分

大家帮忙看看这个程序 运行后要是输入120 结果的最后一行输出21 可是前面的那个0呢

这是由于 你逆序输出时,采用计算的方式造成的。 120是三位数 你的三位数输出为: printf("按逆序输出该数为%d\n",e*100+d*10+c); 这里由于 e等于0,d =2 c=1; 所以 e*100+d*10+c = 21了。 正确的结果为 021这是逆序。 可以修改为: printf("按逆序输出该数为%d%d%d\n",e,d,c); 这样就可以了。 其他的都可以按照这种方式修改。

n个点随机分布,画一条直使在直线上的点最多? 有没有什么高效的算法? 蛮力法不用说 O(n^3

对于一个点a,若点b,c与a形成的线段 ab,ac斜率相等,那么,abc在同一直线上, 所以对于每个点An,求所有其他点的与之斜率,对斜率进行排序,取相同斜率数量最大的An-max,比较所有An-max,最大值就是所要求的解。 这个比较简单,O(n^2)

有四件商品,它们的价格之和是 7.11,价格之乘积也是 7.11,用蛮力法求解这4件东西的价格各是多少?

答案:1.20,1.25,1.50,3.16 注意:如果你对数论一窍不通,那么以下的内容就不要看了。数学讲求的是严谨的推导,有的时候严谨到甚至会让人难于接受。 解:商品的价格,一般都有两位小数,所以我们认为它们的形式就限于X.XX的形式。而4件商品的价格,都不能大于7.11(不然之 和必大于7.11),从而也不能有3个小于1的(不然另一个必大于7.11才能使乘积为7.11),也就是说,任意3个数字之和不能小 于1,所以这4个数字都不能大于6.11。我们可以将4件物品的价格分别乘以100,凑成整数。 设4件商品的价格乘以100后,分别是A,B,C,D,则有A+B+C+D=711,A*B*C*D=

标签:信息技术 编程 算法 CC++ 数学

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18