史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2007-11-29, 10:12 PM   #1
ber751
榮譽勳章

勳章總數
UID -
在線等級:
文章: n/a
精華:
預設 程式 - 關於”迷宮”的程式碼

請問以下這些程式碼...有更精簡的方式嗎???

還有...可以告訴我每行程式碼的意思嗎??

感激不盡!!
語法:
#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, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
請各位大大幫我一下 關於無法移除的程式 Kowea 一般電腦疑難討論區 3 2003-08-19 09:31 AM
有關於Nero 6 的程式問題 龍雲 軟體應用問題討論區 4 2003-07-30 12:01 PM
哪種工具能把/%CD%BC%D0% 的程式碼翻譯回中文 psac 多媒體影音轉檔燒錄技術文件 0 2003-07-18 10:37 PM
關於VC的程式碼,請大家幫幫忙@@   木村倒頭哉 一般電腦疑難討論區 0 2003-05-19 10:16 AM


所有時間均為台北時間。現在的時間是 04:34 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1