LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: ninjai

过河问题!!!大家帮忙看看

[复制链接]
发表于 2003-5-20 08:08:53 | 显示全部楼层
注释太多太乱。应该说明的变量和函数没有说明,反而说了一大堆废话。
发表于 2003-5-20 08:23:49 | 显示全部楼层

  1. typedef
  2. struct node
  3. {
  4.   int             a;
  5.   int             b;
  6.   int             c;
  7.   int            no;
  8.   int          prec;

  9.   struct node *next;
  10.   struct node * pre;
  11. }
  12. qu;
复制代码

其中的a,b,c是什么意思,怎么不解释一下。
发表于 2003-5-20 08:26:01 | 显示全部楼层
qu *redBox;                          /*用来放置初始状态*/
op *  flag;                          /*指示链队列*/
为什么要取名为redBox,如果是保存状态,可以叫statue之类的。
flag是用来保存什么标志吗?
发表于 2003-5-20 08:29:12 | 显示全部楼层
qu **    born( qu * );
实现born的算法是什么?
发表于 2003-5-20 08:33:10 | 显示全部楼层
flag->front       = (qu *)malloc( sizeof(qu) );
既然用了malloc分配内存,那就应该在用完之后回收内存。难道你不怕内存丢失吗?我可没有在你的程序中找到free呀!
发表于 2003-5-20 08:57:35 | 显示全部楼层
真是奇怪,一个简单的双链表要搞得这样复杂。
发表于 2003-5-20 09:24:09 | 显示全部楼层
程序可读性太差。你自己先改改吧。有兴趣可以看看这个:
http://www.fanqiang.com/a4/b2/20020710/060201265.html
 楼主| 发表于 2003-5-20 21:14:54 | 显示全部楼层
好吧,谢谢kj兄教导
我来说明一下各个函数和变量
我尽量少用废话:}
不过你知道有句话叫习惯成自然
至少我的出发点是好的,都是为了解决问题:)


再容我说明一下,也斗胆提点要求:

首先,请至少先读一下问题描述(我偶尔也jjww)

然后,我不是计算机专业的,而且我也很业余(惭愧,除了这句我不打算找借口)
所以有时候并不知道程序这个圈子里的一些规矩或是“黑话(?)”
如果让人觉得不可思议也好,不可理喻也好,胡搅蛮缠也好,或是朽木不可雕也好
至少对我保持一点点耐心,当然,你当骂则骂
学习是一个过程
(我想作为一个学生我已经认识到这点并且有资格这么说了)
希望你知道我已经十分小心翼翼
为了解决问题
希望kj兄理解,谢谢
还有,我希望你至少有一些幽默感
过分吗?
啊,不管怎么样,谢谢kj兄指导
我们来讨论问题吧:)
说明:括号中为废话,不看亦可
(我仍然不能保证不会出现废话,但我尽量避免)



*************
1.
先说
  1. typedef
  2. struct node
  3. {
  4.   int             a;
  5.   int             b;
  6.   int             c;
  7.   int            no;
  8.   int          prec;

  9.   struct node *next;
  10.   struct node * pre;
  11. }
  12. qu;

  13. 其实这个结构体  就是用来存放过河过程中  会产生的各种状态  的结构
  14. a,b分别表示  当前岸上的正常人人数 和 当前岸上的精神病人人数
  15. c      表示  当前小船在哪一岸  起始岸(用1表示) 或是 目标岸(用0表示)
  16. no     表示  当前状态的序号
  17. prec   表示  当前状态的前趋号(即当前状态的父状态的序号)
复制代码



*************


*************
2.
再说
这个redBox指针指向的空间是用来储存初始状态的
(如果你感兴趣的话,我认为red是充满活力的颜色
那么它作为要以后产生的一切状态的初始状态
我就起了这么个名字
我认为是装了些东西的所以叫box)

在以后程序中其中内容都不会变,就是用来存放初始状态

**************


**************
3.
flag指向的这个结构体里面包含两个指针
一个front用来指向生成的队列的首节点
另一个rear用来指向生成的队列的尾节点
通过这个flag就能控制这个队列的一些情况了
(小时侯跳绳领悟到你要想控制一根绳子就抓住它的两端)

**************


**************
4.
至于这个born函数的算法
(我实在有些不好意思
因为我没有什么见识
上课也不十分认真
课余也没有勤于思考
所以当时想到要怎么让一个状态产生下面一系列状态的时候
我真的很茫然
现实世界中的物种后代产生方法
虽略有见闻,但尚不能领悟并由彼及此)

从问题上看
谈不上算法
我只好用了一种相当蠢的办法
就是先用两重循环列出所有可能产生的状态
然后再用if语句去掉不合法的状态
以后就剩下想要的状态

从程序实现上看
一个qu结构体做入口参数
诞生以后产生的若干状态分别用一个指针数组中的若干指针指向
然后返回此指针数组的首地址
从而实现从一个状态返回诞生的多个状态

(这么说不知是否合乎要求,如果不是文字数量方面的问题
我想在我的表达能力所及范围之内尽力了)

***************


***************
5.
关于flag的分配内存问题,没有什么好说的
谨受教
我马上动手
是不是其他的都要在malloc之后释放内存啊
谢谢


***************


***************
6.
不是我想把一个双链表搞得如此复杂
只是我能力实在有限,不得已
我想如果你有再有一点时间请看一下我的想法:

(1)根据用户的输入产生一个初始状态
(2)入这个链表表示的队列,每入一个判断是否目标状态,是的话进行打印,即找出路径(打印见程序注释,你不介意的话)
(3)对队首状态用born生成若干子状态,每个子状态(2)(3)
(4)直到最后没有新状态可产生入队了,尚无目标状态,程序告诉用户没有可能

***************

***************
7.
其他变量、函数说明

函数:
函数共有4个

main()
enqueue() 入队列
born()    衍生函数,用来从一个状态产生若干个新状态
prt()     若最终找到目标状态,搜索出路径并打印

变量:
只对两个变量做点说明其他请看程序中的注释,或是再提出来

sonnum  就是sonnumber
把born函数中产生的有效新状态个数传递给它
用来做为子状态逐个入队列这个循环的计数量

grandpa 就是born函数中的入口参数的父状态
找到它并把产生状态与之比较
就可以避免产生状态与入口参数父状态重复


***************


心有怯怯焉
不知措辞(礼貌程度或是问题描述方面)是否得当
望指教并谅解


谢谢观看 && 谢谢帮忙 && 请继续帮忙!!!!
再次谢谢!!
发表于 2003-5-20 21:31:37 | 显示全部楼层
do not run a TRADITIONAL program in windows, it may cause problems, such as memory R/W fault, CPU fault...
your program is really running under windows's "DOS" VM, it is very strict, all illegal accession may cause problems.
发表于 2003-5-20 21:41:50 | 显示全部楼层
首先声明,我提出的意见并不完全是针对你一个人。在这个论坛上粘贴代码和学生大部分都没有养成良好的编程风格。贴出来的代码变量取名混乱,没有缩进,使用一些别出心裁的写法,等等。。。这是学校的教育造成的,但如果不改正过来,倒霉的将是它们自己。我今天花了一个多小时的时间,还是没有弄明白你写的程序是怎么回事。对于我来说,如果自己动手写一个相同功能的程序,恐怕不会花费比这更长的时间。如果要把代码贴出来给别人看,就要考虑程序应该写得让别人更好地理解,这样才能指出存在的问题。如果写的程序都象密码一样难懂,别人如何给你提出意见?这样的代码,如果你过了一两个月再来看一遍,恐怕自己都会搞糊涂的。
当然,如果程序只是你自己用,怎么写都是无所谓的。但对于大型项目,程序员间不可避免要进行交流,如果每个程序员理解别人写的代码比他自己写一个相同功能的代码还长,后果将是不堪设想。正因为如此,慢慢地形成了一些编程的规范,以保证大家对别人写的程序都能容易地理解。下面就是gnu的编码标准,不要求你一步到位,你尽量照着做就是了。
http://www.linuxforum.net/forum/ ... op&Number=29053
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表