演算法心得:
1.利用廣度優先遍歷(bfs)實現尋找最短路徑
2.利用樹的思想,將每走一步的終點與它的起點相連線,這樣就能在最後把整條最短路徑找出來
//設定乙個結構體,儲存座標
struct note
que[size*size];
//儲存座標和連線指標
struct tree
*ans[size][2*size];
int main()
//設定地圖
void set_map()
}//列印地圖
void print_map()
if (i == end_x && j == end_y)
else
printf("%c", ch[i][j]);
} printf("\n"); }}
//設定起始位置
void set_startplace()
//設定終點
void set_endplace()
//控制命令臺輸出字型顏色函式
void color(const unsigned short color1)
//廣度搜尋和樹的結合
void bfs()
,,, };
int head, tail;
int k, flag = 0, tx, ty;
head = 1;
tail = 1;
que[tail].x = start_x;
que[tail].y = start_y;
mark[start_x][start_y] = 1;
ans[start_x][start_y] = (struct tree*)malloc(sizeof(struct tree));
ans[start_x][start_y]->x = start_x;
ans[start_x][start_y]->y = start_y;
ans[start_x][start_y]->next = null;
tail++;
while (head < tail)
if (ch[tx][ty] != 6 && ch[tx][ty] != 3 && mark[tx][ty] == 0)
if (tx == end_x && ty == end_y)
}if (flag == 1)
head++;
} if (flag == 0) }
//儲存路線
void printline(int x, int y)
}//移動函式
void move()
print_sentence();
}
//這是移動游標的函式
void gotoxy(int x, int y)
; /*coord是windows api中定義的一種結構,表示乙個字元在控制台螢幕上的座標。其定義為:
typedef struct _coord coord;*/
setconsolecursorposition(getstdhandle(std_output_handle), coord);
}//結束語
void print_sentence()
void print_loose()
for (s = 1;s<16;s++)
*/system("cls");
gotoxy(size, size / 2);
printf("對不起,你這個迷宮打死我也走不出來!!\n");
}
最短路徑走出迷宮
題目描述 解題思路 1.採用乙個二維陣列,不斷的接受迷宮地圖 因為有多個地圖 獲取到迷宮地圖後,採用廣度 優先方式走迷宮,找到的第一條路徑一定是最短的路徑,但是深度優先則不一定。2.結構設定 3.採用廣度優先方式走迷宮 將start入佇列,對該位置進行標記,只要佇列不為空,繼續以下步驟,直到到達出口...
尋找迷宮中的最短路徑
給定乙個n m的二維整數陣列,用來表示乙個迷宮,陣列中只包含0或1,其中0表示可以走的路,1表示不可通過的牆壁。最初,有乙個人位於左上角 1,1 處,已知該人每次可以向上 下 左 右任意乙個方向移動乙個位置。請問,該人從左上角移動至右下角 n,m 處,至少需要移動多少次。資料保證 1,1 處和 n,...
迷宮最短路徑
include include using namespace std const int max n 100,max m 100 const int inf 100000000 使用pair表示狀態時,使用typedef會更加方便一些 typedef pairp 輸入 char maze max ...