| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 768 人关注过本帖
标题:有难度的习题..
只看楼主 加入收藏
cs9810dsy
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-7-7
收藏
 问题点数:0 回复次数:1 
有难度的习题..
不知道你学了《数据结构》,如果学了这东东,大概就明白我要干什么了,就是要我们,给中国地图着色,只用四种颜色,相邻的省份颜色不能相同,除了限制时间外,什么都没限制,可以用任何方式实现,我想大概
相当一软件开发之类的,打开之后,会自动给地图一一着色。
我知道的就这么多了,现在我还没找到一个突破口,天知道是怎么一回事。

三、设计和调试过程的规范化要求
1、对每个题目要有需求分析
 在需求分析中,将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构(有些题目已经指定了数据存储结构的,按照指定的设计),设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。
给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来 。
 对有些题目提出算法改进方案,比较不同算法的优缺点。
如果程序不能正常运行,写出实现此算法中遇到的问题,和改进方法;
2、对每个题目要有相应的源程序(可以是一组源程序):
源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
程序能够正确运行,并有基本的容错功能,尽量避免由于操作错误时出现死循环;
3、最后提供的主程序可以象一个应用系统一样有主窗口,通过主菜单和分级菜单调用课程设计中要求完成的各个功能模块,调用后可以返回到主菜单,继续选择其他功能进行其他功能的选择。
搜索更多相关主题的帖子: 习题 难度 
2005-07-07 10:10
qiqiaizhuzhu
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2005-7-5
收藏
得分:0 

【参考程序1】 const lin:array[1..12,1..12] of 0..1 {区域相邻数组,1表示相邻} =((0,1,1,1,1,1,0,0,0,0,0,0), (1,0,1,0,0,1,1,1,0,0,0,0), (1,1,0,1,0,0,0,1,1,0,0,0), (1,0,1,0,1,0,1,0,1,1,0,0), (1,0,0,1,0,1,0,0,0,1,1,0), (1,1,0,0,1,0,1,0,0,0,1,0), (0,1,0,0,0,1,0,1,0,0,1,1), (0,1,1,0,0,0,1,0,1,0,0,1), (0,0,1,1,0,0,0,1,0,1,0,1), (0,0,0,1,1,0,0,0,1,0,1,1), (0,0,0,0,1,1,1,0,0,1,0,1), (0,0,0,0,0,0,1,1,1,1,1,1)); var color:array[1..12] of byte; {color数组放已填的颜色} total:integer;

function ok(dep,i:byte):boolean; {判断选用色i是否可用} var k:byte; {条件:相邻的区域颜色不能相同} begin for k:=1 to dep do if (lin[dep,k]=1) and (i=color[k]) then begin ok:=false;exit;end; ok:=true; end;

procedure output; {输出} var k:byte; begin for k:=1 to 12 do write(color[k],' ');writeln; total:=total+1; end;

procedure find(dep:byte); {参数dep:当前正在填的层数} var i:byte; begin for i:=1 to 4 do begin {每个区域都可能是1-4种颜色} if ok(dep,i) then begin color[dep]:=i; if dep=12 then output else find(dep+1); color[dep]:=0; {恢复初始状态,以便下一次搜索} end; end; end;

begin total:=0; {总数初始化} fillchar(color,sizeof(color),0); find(1); writeln('total:=',total); end.

【参考程序2】 const {lin数组:代表区域相邻情况} lin:array[1..12] of set of 1..12 = ([2,3,4,5,6],[1,3,6,7,8],[1,2,4,8,9],[1,3,5,9,10],[1,4,6,10,11], [1,2,5,7,11],[12,8,11,6,2],[12,9,7,2,3],[12,8,10,3,4], [12,9,11,4,5],[12,7,10,5,6],[7,8,9,10,11]); color:array[1..4] of char=('r','y','b','g'); var a:array[1..12] of byte; {因有12个区域,故a数组下标为1-12} total:integer;

function ok(dep,i:integer):boolean; {判断第dep块区域是否可填第i种色} var j:integer; { j 为什么设成局部变量?} begin ok:=true; for j:=1 to 12 do if (j in lin[dep]) and (a[j]=i) then ok:=false; end;

procedure output; {输出过程} var j:integer; { j 为什么设成局部变量?} begin inc(total); {方案总数加1} write(total:4); {输出一种方案} for j:=1 to 12 do write(color[a[j]]:2);writeln; end;

procedure find(dep:byte); var i:byte; { i 为什么设成局部变量?} begin for i:=1 to 4 do {每一区域均可从4种颜色中选一} begin if ok(dep,i) then begin {可填该色} a[dep]:=i; {第dep块区域填第i种颜色} if (dep=12) then output {填完12个区域} else find(dep+1); {未填完} a[dep]:=0; {取消第dep块区域已填的颜色} end; end; end; begin {主程序} fillchar(a,sizeof(a),0); {记得要给变量赋初值!} total:=0; find(1); writeln('End.'); end

2005-07-07 16:31
快速回复:有难度的习题..
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013380 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved