最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言使用深度優(yōu)先搜索算法解決迷宮問題(堆棧)

 更新時間:2017年09月15日 08:57:27   作者:e421083458  
這篇文章主要介紹了C語言使用深度優(yōu)先搜索算法解決迷宮問題,涉及C語言堆棧的使用與深度優(yōu)先算法解決迷宮問題的相關操作技巧,需要的朋友可以參考下

本文實例講述了C語言使用深度優(yōu)先搜索算法解決迷宮問題。分享給大家供大家參考,具體如下:

深度優(yōu)先搜索

偽代碼

(Pseudocode)如下:

將起點標記為已走過并壓棧;
while (棧非空) {
從棧頂彈出一個點p;
if (p這個點是終點)
break;
否則沿右、下、左、上四個方向探索相鄰的點
if (和p相鄰的點有路可走,并且還沒走過)
將相鄰的點標記為已走過并壓棧,它的前趨就是p點;
}
if (p點是終點) {
打印p點的坐標;
while (p點有前趨) {
p點 = p點的前趨;
打印p點的坐標;
}
} else
沒有路線可以到達終點;

C語言代碼:

#include <stdio.h>
#define MAX_ROW 5
#define MAX_COL 5
struct point { int row, col; } stack[512];
int top = 0;
void push(struct point p)
{
  stack[top++] = p;
}
struct point pop(void)
{
  return stack[--top];
}
int is_empty(void)
{
  return top == 0;
}
int maze[MAX_ROW][MAX_COL] = {
  0, 1, 0, 0, 0,
  0, 1, 0, 1, 0,
  0, 0, 0, 0, 0,
  0, 1, 1, 1, 0,
  0, 0, 0, 1, 0,
};
void print_maze(void)
{
  int i, j;
  for (i = 0; i < MAX_ROW; i++) {
  for (j = 0; j < MAX_COL; j++)
  printf("%d ", maze[i][j]);
  putchar('\n');
  }
  printf("*********\n");
}
struct point predecessor[MAX_ROW][MAX_COL] = {
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
};
void visit(int row, int col, struct point pre)
{
  struct point visit_point = { row, col };
  maze[row][col] = 2;
  predecessor[row][col] = pre;
  push(visit_point);
}
int main(void)
{
  struct point p = { 0, 0 };
  maze[p.row][p.col] = 2;
  push(p);
  while (!is_empty()) {
    p = pop();
    if (p.row == MAX_ROW - 1 /* goal */     && p.col == MAX_COL - 1)
    break;
    if (p.col+1 < MAX_COL /* right */  && maze[p.row][p.col+1] == 0)
      visit(p.row, p.col+1, p);
    if (p.row+1 < MAX_ROW /* down */ && maze[p.row+1][p.col] == 0)
      visit(p.row+1, p.col, p);
    if (p.col-1 >= 0 /* left */ && maze[p.row][p.col-1] == 0)
      visit(p.row, p.col-1, p);
    if (p.row-1 >= 0 /* up */  && maze[p.row-1][p.col] == 0)
      visit(p.row-1, p.col, p);
    print_maze();
  }
  if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1)
  {
    printf("(%d, %d)\n", p.row, p.col);
    while (predecessor[p.row][p.col].row != -1) {
      p = predecessor[p.row][p.col];
      printf("(%d, %d)\n", p.row,
      p.col);
    }
  } else
    printf("No path!\n");
    return 0;
}

希望本文所述對大家C語言程序設計有所幫助。

相關文章

  • 使用kendynet構建異步redis訪問服務

    使用kendynet構建異步redis訪問服務

    這篇文章主要介紹了在kendynet上寫的一個簡單的redis異步訪問接口,大家參考使用吧
    2014-01-01
  • C語言如何把浮點數(shù)轉換為字符串

    C語言如何把浮點數(shù)轉換為字符串

    這篇文章主要介紹了C語言如何把浮點數(shù)轉換為字符串方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • C++實現(xiàn)折半插入排序(BinaryInsertSort)

    C++實現(xiàn)折半插入排序(BinaryInsertSort)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)折半插入排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方案

    Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方

    這篇文章主要介紹了Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方案,需要的朋友可以參考下
    2014-10-10
  • C++版圖書管理系統(tǒng)

    C++版圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++版圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 軟件構建工具makefile基礎講解

    軟件構建工具makefile基礎講解

    這篇文章介紹了軟件構建工具makefile,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • C語言實現(xiàn)軍旗游戲的示例代碼

    C語言實現(xiàn)軍旗游戲的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)軍旗游戲,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • 詳解C語言之緩沖區(qū)溢出

    詳解C語言之緩沖區(qū)溢出

    緩沖區(qū)是一塊連續(xù)的計算機內(nèi)存區(qū)域,可保存相同數(shù)據(jù)類型的多個實例。緩沖區(qū)可以是堆棧、堆和靜態(tài)數(shù)據(jù)區(qū)。在C/C++語言中,通常使用字符數(shù)組和malloc/new實現(xiàn)緩沖區(qū)。溢出指數(shù)據(jù)被添加到分配給該緩沖區(qū)的內(nèi)存塊之外。緩沖區(qū)溢出是最常見的程序缺陷
    2021-06-06
  • C++逐步介紹日期類的使用

    C++逐步介紹日期類的使用

    下面小編就為大家?guī)硪黄狢++實現(xiàn)日期類(Date類)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2022-07-07
  • C++全面細致講解復數(shù)類

    C++全面細致講解復數(shù)類

    本文章向大家介紹C++ 標準庫中的復數(shù)類,主要包括C++ 標準庫中的復數(shù)類使用實例、應用技巧、基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下
    2022-06-06

最新評論

和顺县| 建水县| 玛纳斯县| 孙吴县| 武邑县| 定远县| 松阳县| 南丹县| 大埔区| 扎兰屯市| 陆丰市| 海淀区| 东乌珠穆沁旗| 应城市| 榆林市| 曲阳县| 乌兰浩特市| 万载县| 西丰县| 中宁县| 双桥区| 洞头县| 安国市| 吴桥县| 崇仁县| 宝鸡市| 泉州市| 思南县| 宁国市| 乐业县| 达尔| 长子县| 茌平县| 岫岩| 集贤县| 龙岩市| 珲春市| 平果县| 咸丰县| 成都市| 望江县|