作者remember11 (纪元)
看板Programming
标题[问题] 递回改非递回
时间Sun Apr 11 23:27:21 2010
如题
这是题目的网址
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: 163.13.127.188
1F:推 yauhh:真的蛮难的.先说第二个,把map阵列重新放回1218.160.213.121 04/12 01:24
2F:→ yauhh:就是要准备个stack让挑走的格数暂存又取回..218.160.213.121 04/12 01:25
3F:→ yauhh:而因为程式是在map矩阵挑走格数又塞回格数,218.160.213.121 04/12 01:29
4F:→ yauhh:map的状态不会是主要的终止条件.218.160.213.121 04/12 01:29
5F:→ yauhh:最後的for回圈可以取出来做主要的5x5回圈,218.160.213.121 04/12 01:30
6F:→ yauhh:回圈中要挑走map矩阵,挑完的时候印出来,218.160.213.121 04/12 01:32
7F:→ yauhh:挑过的格数暂存在stack,等做完时取回.218.160.213.121 04/12 01:33
8F:→ yauhh:真难转换,好希望能想出系统化的转换方法.218.160.213.121 04/12 01:34
9F:推 march20:只好暴力跳出 loop 再重新进入了 XD 66.75.255.220 04/12 04:44
10F:推 march20:然後全部的变数都放进 stack XD 66.75.255.220 04/12 04:45
11F:→ brianhsu:用回圈自己 maintain stack。XD 114.32.42.74 04/12 07:39
12F:推 cooljony0109:用stack != NULL 当终止条件 163.13.127.179 04/12 14:25
13F:→ cooljony0109:不知道可不可行!? 163.13.127.179 04/12 14:26