作者cutecpu (可爱中央处理器)
看板Programming
标题Re: [问题] 递回改非递回
时间Sat Apr 17 16:54:17 2010
改过的版本 =>
http://codepad.org/ImuTco5T
程式说明:
1. 後面注解有 /* add */ 代表新增的程式码
2. 被 /* xxx */ 括住的部份是原来的程式码不需要的部份
3, 除了上面所说的以外,其它都是沿用原来的程式码
3. 针对你问题一:找不到结束的条件式,相关程式行数 => 18,19,30,43,50
4. 针对你问题二:●无法将map阵列重新放回1,相关程式行数 => 20,30,31,36-38,43-46
※ 引述《remember11 (纪元)》之铭言:
: 如题
: 这是题目的网址
: http://uva.onlinejudge.org/external/2/291.html
: 这是ACM的竞赛题目 (一笔划问题)
: 下面的程式码是老师给的 c语言code
: 老师要我们把它从"递回"改成"非递回"
: 因为小弟才疏学浅+递回很少用...
: 我大概改了两个版本都失败
: 我遇到了两个问题
: ●找不到结束的条件式//要把所有的可能找出来
: ●无法将map阵列重新放回1
: /*
: map[now][a]=1;
: map[a][now]=1;
: */
: 不知道有没有大大可以指点思考一下方向
: //----------------------------------------
: #include<stdio.h>
: #include<stdlib.h>
: int map[5][5]={
: 0,1,1,0,1,
: 1,0,1,0,1,
: 1,1,0,1,1,
: 0,0,1,0,1,
: 1,1,1,1,0};
: int tryway[9]={0};
: void make(int now,int go)
: {
: int a,b,sum=0;
: tryway[go]=now;
: for(a=0;a<5;a++)
: for(b=0;b<5;b++) sum=sum+map[a][b];
: if(sum==0)
: {
: for(a=0;a<9;a++) printf("%d",tryway[a]+1);
: printf("\n");
: }
: for(a=0;a<5;a++)
: if(map[now][a]==1&&a!=now)
: {
: map[now][a]=0;
: map[a][now]=0;
: make(a,go+1);
: map[now][a]=1;
: map[a][now]=1;
: }
: }
: main()
: {
: make(0,0);
: system("pause");
: return 0;
: }
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.137.13.233