b2c信息网

您现在的位置是:首页 > 明日新闻 > 正文

明日新闻

算法分析与设计源码(算法设计与分析代码)

hacker2022-08-18 23:30:23明日新闻80
本文目录一览:1、《数据结构》算法实现与分析高一凡中的源代码要怎么用2、

本文目录一览:

《数据结构》算法实现与分析高一凡中的源代码要怎么用

这个代码可以直接用。用的时候必须把include中的文件也保存好。

地图着色问题源程序C++语言(算法设计与分析)急求

从一个省开始,给它涂上任意一种颜色1,遍历它旁边的省份,涂上与已经涂色并于他相邻的省份不同的颜色就行了。

理论上4种颜色就够了.地图的四色问题嘛!

可能会有多组解。用递归(dfs)就可以输出所有解了。

地图着色算法C语言源代码

前面我写了一个地图着色(即四色原理)的C源代码。

写完以后想了一下,感觉还不完善,因为从实际操作的角度来考虑,四种可用的颜色放在旁边,不同的人可能会有不同的选择顺序,另外,不同的人可能会选择不同的城市作为着色的起点,而当时的程序没有考虑这个问题。于是,把程序修改为下面的样子,还请同行分析并指出代码中的不足之处:

#i nclude stdio.h

#define N 21

int allcolor[4];/*可用的颜色*/

int ok(int metro[N][N],int r_color[N],int current)

{/*ok函数和下面的go函数和原来的一样,保留用来比较两种算法*/

int j;

for(j=1;jcurrent;j++)

if(metro[current][j]==1r_color[j]==r_color[current])

return 0;

return 1;

}

void go(int metro[N][N],int r_color[N],int sum,int current)

{

int i;

if(current=sum)

for(i=1;i=4;i++)

{

r_color[current]=i;

if(ok(metro,r_color,current))

{

go(metro,r_color,sum,current+1);

return;

}

}

}

void color(int metro[N][N],int r_color[N],int sum,int start)

{

int i,j,k;

r_color=allcolor[0];

for(i=start+1;i!=start;i=(i+1)%(sum+1))/*把所有编号看作一个环*/

if(i==0)/*城市号从1开始编号,故跳过0编号*/

continue;

else

for(j=0;j4;j++)

{

r_color[i]=allcolor[j];/*选取下一种颜色,根据allcolor中颜色顺序不同,结果不同*/

for(k=1;ki;k++)/*检查是否有冲突,感觉还可以改进,如使用禁忌搜索法*/

if(metro[i][k]==1r_color[k]==r_color[i])

break;

if(k=i)

break;

}

}

void main()

{

int r_color[N]={0};

int t_color[N]={0};

int i;

int start;/*着色的起点*/

int metro[N][N]={{0},

{0,1,1,1,1,1,1},

{0,1,1,1,1},

{0,1,1,1,0,0,1},

{0,1,1,0,1,1},

{0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1},

{0,1,0,1,0,1,1,1,1,1},

{0,0,0,0,0,0,1,1,1},

{0,0,0,0,0,0,1,1,1,1,0,0,1},

{0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1},

{0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1},

{0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1},

{0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1},

{0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1},

{0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1},

{0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1},

{0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1},

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1},

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1},

{0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,1,1},

{0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1}};

allcolor[0]=1;allcolor[1]=2;allcolor[2]=3;allcolor[3]=4;/*选色顺序,顺序不同,结果不同*/

start=1;

/* clrscr();*/

printf("\nAll color is:\n");

for(i=0;i4;i++)/*当前选色顺序*/

printf("%d ",allcolor[i]);

go(metro,r_color,20,1);

printf("\nFirst method:\n");

for(i=1;i=20;i++)

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

color(metro,t_color,20,start);

printf("\nSecond method:\n");

printf("\nAnd the start metro is:%d\n",start);

for(i=1;i=20;i++)

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

}

说是人性化着色,其实还有一个问题没有考虑,那就是操作员跳跃式着色,就像大家玩“扫雷”游戏一样。其实也容易实现,可以像定义选色顺序一样定义着色顺序。

请问有谁有计算机各种经典算法的总结性介绍?有源代码最好

上面的内容应有尽有,连代码都给出了:

经典算法设计方法大杂烩

经典算法设计方法

一、什么是算法

算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。算法常常含有重复的步骤和一些比较或逻辑判断。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模n 的函数f(n),算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。时间复杂度用“O(数量级)”来表示,称为“阶”。常见的时间复杂度有: O(1)常数阶;O(log2n)对数阶;O(n)线性阶;O(n2)平方阶。

算法的空间复杂度是指算法需要消耗的空间资源。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。

二、算法设计的方法

1.递推法

递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模为N的解,当N=1时,解或为已知,或能非常方便地得到解。能采用递推法构造算法的问题有重要的递推性质,即当得到问题规模为i-1的解后,由问题的递推性质,能从已求得的规模为1,2,…,i-1的一系列解,构造出问题规模为I的解。这样,程序可从i=0或i=1出发,重复地,由已知至i-1规模的解,通过递推,获得规模为i的解,直至得到规模为N的解。

【问题】 阶乘计算

问题描述:编写程序,对给定的n(n≤100),计算并输出k的阶乘k!(k=1,2,…,n)的全部有效数字。

由于要求的整数可能大大超出一般整数的位数,程序用一维数组存储长整数,存储长整数数组的每个元素只存储长整数的一位数字。如有m位成整数N用数组a[ ]存储:

N=a[m]×10m-1+a[m-1]×10m-2+ … +a[2]×101+a[1]×100

并用a[0]存储长整数N的位数m,即a[0]=m。按上述约定,数组的每个元素存储k的阶乘k!的一位数字,并从低位到高位依次存于数组的第二个元素、第三个元素……。例如,5!=120,在数组中的存储形式为:

3 0 2 1 ……

首元素3表示长整数是一个3位数,接着是低位到高位依次是0、2、1,表示成整数120。

计算阶乘k!可采用对已求得的阶乘(k-1)!连续累加k-1次后求得。例如,已知4!=24,计算5!,可对原来的24累加4次24后得到120。细节见以下程序代码。

# include stdio.h

# include malloc.h

# define MAXN 1000

void pnext(int a[ ],int k)

{ int *b,m=a[0],i,j,r,carry;

b=(int * ) malloc(sizeof(int)* (m+1));

for ( i=1;i=m;i++) b[i]=a[i];

for ( j=1;j=k;j++)

{ for ( carry=0,i=1;i=m;i++)

{ r=(ia[0]?a[i]+b[i]:a[i])+carry;

a[i]=r%10;

carry=r/10;

}

if (carry) a[++m]=carry;

......

王晓东算法设计与分析的源代码谁有给我一份吧!

这本书上不是有源代码吗?每一道例题都是有代码的啊。并且都是可以运行的啊。我有后面习题答案的代码,你要不? 并且有部分课件。

那位高手介绍下算法分析与设计的简单、易学懂学习方法?

没有什么捷径,只有抱着电脑练习了,我不知道你是不是专升本,如果是,我跟你的情况比较相像,我上专科的时候也没有学数学结构,不过我还好,学了c语言,学得一般,但是都是比较简单的基础知识,现在学数据结构,如果你能理解算法,也就是你说的思想,那就比较好办,至于你说你不怎么懂c语言什么,我觉得那不是问题,最重要的是你能理解数据结构的思想

你先找本不是伪代码的算法书,(我们学数据结构,是用的清华大学出版社严蔚敏的,里面的c语言是伪代码,或者去图书馆借一本数据结构的实验报告册,上面都是实验,也就是有源码那种,)你在自己机子上安装上相应的IDE环境,照着书上的代码敲,你多做这样的练习,自然而然的就会了,练习一段时间后,你会觉得没什么了不起的事。

如果你下定决心要在编程上有所成就,真的要下苦功夫,学计算机不是一件容易的事,如果要学好就是要比别人付出更多的努力。

要把计算机学好,练习加上思考才是硬道理。

发表评论

评论列表

  • 鸽吻木緿(2022-08-19 10:12:23)回复取消回复

    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1}, {0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,1,1},

  • 性许笙沉(2022-08-19 04:23:34)回复取消回复

    {0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1}, {0,1,0,1,0,1,1,1,1,1}, {0,0,0,0,0,0,1,1,1},

  • 南殷听弧(2022-08-19 04:52:20)回复取消回复

    示成整数120。 计算阶乘k!可采用对已求得的阶乘(k-1)!连续累加k-1次后求得。例如,已知4!=24,计算5!,可对原来的24累加4次24后得到120。细节见以下程序

  • 竹祭征棹(2022-08-19 04:46:24)回复取消回复

    结构,如果你能理解算法,也就是你说的思想,那就比较好办,至于你说你不怎么懂c语言什么,我觉得那不是问题,最重要的是你能理解数据结构的思想你先找本不是伪代码的算法书,(我们学数据结构,是用的清华大学出版社严蔚敏的,里面的c语言是伪代码,或者去图书馆借一

  • 嘻友倦话(2022-08-19 00:48:46)回复取消回复

    if(metro[i][k]==1r_color[k]==r_color[i]) break; if(k=i) break; }}void main(){ int r_color[N]