|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2007-11-29, 10:12 PM | #1 |
|
程式 - 關於”迷宮”的程式碼
請問以下這些程式碼...有更精簡的方式嗎???
還有...可以告訴我每行程式碼的意思嗎?? 感激不盡!! 語法:
#include <stdio.h> #define EAST MAZE[x][y+1] #define WEST MAZE[x][y-1] #define SOUTH MAZE[x+1][y] #define NORTH MAZE[x-1][y] #define ExitX 8 #define ExitY 10 struct list { int x,y; struct list* next; }; typedef struct list node; typedef node* link; int MAZE[10][12] = {1,1,1,1,1,1,1,1,1,1,1,1, 1,0,0,0,1,1,1,1,1,1,1,1, 1,1,1,0,1,1,0,0,0,0,1,1, 1,1,1,0,1,1,0,1,1,0,1,1, 1,1,1,0,0,0,0,1,1,0,1,1, 1,1,1,0,1,1,0,1,1,0,1,1, 1,1,1,0,1,1,0,1,1,0,1,1, 1,1,1,1,1,1,0,1,1,0,1,1, 1,1,0,0,0,0,0,0,1,0,0,1, 1,1,1,1,1,1,1,1,1,1,1,1}; link push(link stack,int x,int y); link pop(link stack,int* x,int* y); int chkExit(); void main() { int i,j,x,y; link path = NULL; x=1; y=1; printf("[迷宮的路徑(0的部分)]\n"); for(i=0;i<10;i++) { for(j=0;j<12;j++) printf("%2d",MAZE[i][j]); printf("\n"); } while(x<=ExitX&&y<=ExitY) { MAZE[x][y]=2; if(NORTH==0) { x -= 1; path=push(path,x,y); } else if(SOUTH==0) { x+=1; path=push(path,x,y); } else if(WEST==0) { y-=1; path=push(path,x,y); } else if(EAST==0) { y+=1; path=push(path,x,y); } else if(chkExit(x,y,ExitX,ExitY)==1) break; else { MAZE[x][y]=2; path=pop(path,&x,&y); } } printf("[老鼠走過的路徑(2的部分)]\n"); for(i=0;i<10;i++) { for(j=0;j<12;j++) printf("%2d",MAZE[i][j]); printf("\n"); } system("PAUSE"); } link push(link stack,int x,int y) { link newnode; newnode = (link)malloc(sizeof(node)); if(!newnode) { printf("Error!\n"); return NULL; } newnode->x=x; newnode->y=y; newnode->next=stack; stack=newnode; return stack; } link pop(link stack,int* x,int* y) { link top; if(stack!=NULL) { top=stack; stack=stack->next; *x=top->x; *y=top->y; free(top); return stack; } else *x=-1; return stack; } int chkExit(int x,int y,int ex,int ey) { if(x==ex&&y==ey) { if(NORTH==1||SOUTH==1||WEST==1||EAST==2) return 1; if(NORTH==1||SOUTH==1||WEST==2||EAST==1) return 1; if(NORTH==1||SOUTH==2||WEST==1||EAST==1) return 1; if(NORTH==2||SOUTH==1||WEST==1||EAST==1) return 1; } return 0; system("PAUSE"); } 此帖於 2007-11-30 02:46 PM 被 mini 編輯. 原因: 幫忙縮編整理 |
送花文章: 0,
|
|
|
相似的主題 | ||||
主題 | 主題作者 | 討論區 | 回覆 | 最後發表 |
請各位大大幫我一下 關於無法移除的程式 | Kowea | 一般電腦疑難討論區 | 3 | 2003-08-19 09:31 AM |
有關於Nero 6 的程式問題 | 龍雲 | 軟體應用問題討論區 | 4 | 2003-07-30 12:01 PM |
關於VC的程式碼,請大家幫幫忙@@ | 木村倒頭哉 | 一般電腦疑難討論區 | 0 | 2003-05-19 10:16 AM |