|
|
发表于 2006-9-11 01:12:23
|
显示全部楼层
好久没有编程了,看到这个帖子后想练习一下编程,我的思路和dzho002兄相同,在这里复习一下链表和递归调用。1-->2-->3-->4-->1....直到所有点都走过.
方向的改变条件是, 按当前方向走的话, 下一点出了图的范围或者已经访问过.
(撞到墙了)
按照这种思路写, 会比较清楚. 而且如果改变(1)-(4)的顺序,可以实现不同的效果. - #include<stdio.h>
- #define MAX_ROW 16
- struct direction
- {
- int dx;
- int dy;
- char name[5];
- struct direction * next;
- };
- int main(void)
- {
- int data[MAX_ROW+2][MAX_ROW+2]={0};
- int i=0,j=1,num=0;
- struct direction d[4]={{0,1,"Right",},{1,0,"Down",},{0,-1,"Left",},{-1,0,"Up",}};
- d[0].next=&d[1];
- d[1].next=&d[2];
- d[2].next=&d[3];
- d[3].next=&d[0];
- struct direction * direction=&d[0];
- printf("Please enter a integer(not greater than %d)\n",MAX_ROW);
- scanf("%d",&num);
- if(num>MAX_ROW) exit(2);
- data[num+1][num]=1;
- data[num][0]=1;
- data[1][num+1]=1;
- findway(direction,1,0,data);
- for(i=1;i<=num;i++){
- for(j=1;j<num;j++) printf("%4d",data[i][j]);
- printf("\n");
- }
- return 0;
- }
- void findway(struct direction * d,int x,int y,int data[MAX_ROW+2][MAX_ROW+2])
- {
- static int i=1;
- if (data[x+d->dx][y+d->dy]==0){
- }
- else{
- if (data[x+d->next->dx][y+d->next->dy]==0) d=d->next;
- else return;
- }
- data[x+d->dx][y+d->dy]=i;
- i++;
- findway(d,x+d->dx,y+d->dy,data);
- }
复制代码 |
|