這是自己編寫的第乙個dos動畫程式,所以自己感觸很深,今天作為乙個成就,寫於自己的部落格中,希望和大家分享~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
定義標頭檔案t11.h中
#include"stdio.h"
#include"string.h"
#include"ctype.h"
#include"malloc.h"
#include"stdlib.h" //atoi(),exit();
#include"io.h" //eof()
#include"math.h"
#define true 1
#define false 0
#define ok 1
#define error 0
typedef int status;
typedef int boolean;
定義儲存資料結構包含於m1.h標頭檔案
#define init_stack_size 40
#define stack_add 10
#define init_queue 100
#define init_add 40
typedef struct
migong,*mi;
typedef struct
ji,*hui;
typedef struct
cun;
typedef struct // 把位子放入棧中 線性表操作
sqstack;
typedef struct sq
sq;typedef struct //定義佇列資料結構
dui;
定義實現函式包含於migong.cpp檔案中
void initdui(dui &l) // 初始化佇列
l.size=init_queue;
printf("初始化成功!! \n");
}void enqueue(dui &l,int i,int j,int i1,int j1) // 此佇列針對迷宮先全部進完後再出,而設的順序佇列
}l.rear->i=i;
l.rear->j=j;
l.rear->i1=i1;
(l.rear++)->j1=j1;
}void initstack(sqstack &l) // 初始化棧操作
l.top=l.bottom;
l.stacksize=init_stack_size;
}status push(sqstack &l,int q,int p) // 壓入位置 q表示行,p表示列
l.top=l.bottom+l.stacksize;
l.stacksize+=stack_add;
}l.top->i=q;
(l.top++)->j=p;
return ok;
}status pop(sqstack &l,int &k,int &l) // 彈出 將棧頂的元素帶回
status emptystack(sqstack l) // 判斷棧為空
void init(ji &l) // 初始化資料
printf("初始化成功!\n");
}void print(ji l)
else
printf(" ");
if((i+1)%l.size == 0)
printf("\n");
}printf("\n");
}void shuru(ji &l,int &e)
// print(l);
printf("設定牆:\n");
printf("輸入迷宮的行和列:");
int k,j;
char ch='y';
while('y' == ch || 'y' == ch)
// print(l);
getchar();
}void ****uan(ji &l,int z,int x,int &m,int &n) // 判斷方向
}void chuli(ji &l,dui &t,sqstack &r)
(l.elem+l.size*i+j)->direct++;
if(m == l.size-2 && n == l.size-2) // 找到最後乙個跳出迴圈
break;
}if(m == l.size-2 && n == l.size-2)
break;
}t=q; // 將q迴圈的值放入t中,最為下次迴圈的終止條件
if(r == w)
if(m == l.size-2 && n == l.size-2)
break;
}m=(--t.rear)->i; // 佇列中的最後乙個入隊元素中是最後乙個位置
n=t.rear->j;
push(r,m,n);
i=t.rear->i1;
j=t.rear->j1;
(l.elem+l.size*m+n)->road=2;
// printf("進入第二個迴圈!!");
// getchar();
while(t.rear != t.front) // 往上一直尋找
}// print(l); // 列印路徑
}void chuli1(ji &l,sqstack &t)
else if((l.elem+l.size*i+j)->direct >4) // 4個方向都沒有路了
(l.elem+l.size*i+j)->road=-1; // 將走過的路,不通的留下記號,標記為-1
(l.elem+l.size*i+j)->foot=1; // 留下足跡
pop(t,i,j); // 不通的路徑出棧}}
if(m == l.size-2 && n == l.size-2) // 將最後乙個位置為留下2
// print(l);
}void gotoconsolexy(handle hconsole,int x,int y) // 定位游標位置
; setconsolecursorposition(hconsole,coordscreen);
return;
} void gotoxy(int x,int y) // 定位游標位置
void move(int m,int n,int p,int q,int e)
void huatu(sqstack &l,int &e,int &i) // 畫圖,產生動畫
}定義主函式中呼叫包含於main_5中
#include"t11.h"
#include "windows.h" // 包含暫停函式
#include"m1.h"
#include"migong.cpp"
void main()
print(s); // 列印出迷宮圖案
huatu(f,e,k); // 畫圖函式,找出按規定演算法的路徑
printf("\n\n恭喜你一條路徑出來啦!! 歷經%d步\n",k);
int m=s.size*s.size; // 儲存長度值
for(int i=0;iroad != 0)
(s.elem+i)->road=1;
(s.elem+i)->direct=1;
(s.elem+i)->foot=0;
}chuli(s,t,r); // 做出處理
print(s); // 列印路徑
e=e+s.size+1; // 算出此刻游標位置
huatu(r,e,k); // 找出最短路徑
printf("\n\n恭喜你最短路徑出來啦!! 歷經%d步\n",k);
}這是全部自己思想編寫出來的,我很享受思考的過程,雖然會有困難,但這是乙個很有意思的過程,不僅需要嚴謹的邏輯思維還需要充分的耐心。
尋找迷宮中的最短路徑
給定乙個n m的二維整數陣列,用來表示乙個迷宮,陣列中只包含0或1,其中0表示可以走的路,1表示不可通過的牆壁。最初,有乙個人位於左上角 1,1 處,已知該人每次可以向上 下 左 右任意乙個方向移動乙個位置。請問,該人從左上角移動至右下角 n,m 處,至少需要移動多少次。資料保證 1,1 處和 n,...
自動尋找走出迷宮的最短路徑
演算法心得 1.利用廣度優先遍歷 bfs 實現尋找最短路徑 2.利用樹的思想,將每走一步的終點與它的起點相連線,這樣就能在最後把整條最短路徑找出來 設定乙個結構體,儲存座標 struct note que size size 儲存座標和連線指標 struct tree ans size 2 size...
迷宮的最短路徑
雖然在網上找不到題目,但這題實在是太經典了,好多搜尋題目都是從它變形來的 從s走到g,不能走 測試資料 10 10 s g include include includeusing namespace std const int inf 100000000 define max n 105 defi...