資料結構 求多出口帶環迷宮的最短路徑(遞迴版本)

2021-08-15 08:48:44 字數 2177 閱讀 9578

maze.h

#pragma once

#includetypedef struct pospos;

typedef struct mazemaze;

maze.c

#define _crt_secure_no_warnings 1

#include#include"maze.h"

#include"stack.h"

/*是否能留在地圖上*/

int canstay(pos* pos)

if (pos->_row < 0 || pos->_col < 0 ||

pos->_row > 6 || pos->_col > 6)

return 1;

}void mark(pos* pos, int map[7][7], int len)

map[pos->_row][pos->_col] = len;

}/*檢查是否可以形成通路*/

int canwalk(pos* pos, int map[7][7], int len_num)

/*lennum表示當前路徑的長度,如果小的話就走不通*/

if (map[pos->_row][pos->_col] == 1 || len_num < map[pos->_row][pos->_col])

return 0;

}/*檢查出口*/

int checkexport(pos* pos, int map[7][7])

if (pos->_row == 0 || pos->_col == 0 ||

pos->_row == 6 || pos->_col == 6)

} return 0;

}/*len的row表示路徑長度,col表示總共有幾條路徑*/

int _getpath(pos* entry, pos* pos, seqstack* stack, int map[7][7], pos* len)

/*判斷出口點是否在地圖上*/

if (!canstay(entry))

++len->_row;

mark(pos, map, len->_row);

/*遞迴出口*/

if (len->_row != 2)

else

}--len->_row;

return;

} }/*上*/

--pos->_row;

if (canstay(pos))

} ++pos->_row;

/*下*/

++pos->_row;

if (canstay(pos))

} --pos->_row;

/*左*/

--pos->_col;

if (canstay(pos))

} ++pos->_col;

/*右*/

++pos->_col;

if (canstay(pos))

} --pos->_col;

/*當前點的四周現在都走不通了*/

/*判斷當前點是不是出口點*/

if (pos->_row == entry->_row && pos->_col == entry->_col)

return 1;

} /*如果不是出口,而這個點又走不通,就先返回一波*/

--len->_row;

return;

}int main() ,,,

,,,,

};seqstack stack;

seqstackinit(&stack);

pos entry;

pos pos;

pos len;

/*初始化*/

entry._row = 0;

entry._col = 1;

pos = entry;

len._row = 1;

len._col = 0;

int i = _getpath(&entry, &pos, &stack, map, &len);

if (i == 0)

else

system("pause");

return 0;

}

//遞迴版本的**比較簡單

資料結構 求多出口迷宮的最短路徑

上面我們已經寫過遞迴和非遞迴來實現求解迷宮的問題,今天我們就在遞迴的基礎上實現多條通路,最短問題。初始化最短路徑地圖 多通路最短路徑 void mazeinitshortpath maze maze int i 0 for iint j 0 for jmap i j map i j 用這個特殊的函式...

資料結構 多出口迷宮找出一條最短路徑

前面我們實現了基礎版本的迷宮求解,只有一條路徑。現在如果有多個出口,我們該如何去找到一條最短的路徑。我們先來思考一下我們是如何在乙個陣列裡找最小值的?有下面乙個陣列 我們可以先把第乙個數設為最小值,然後遍歷陣列,拿它和後面的元素進行比較,把兩個數中較小的賦給min,直到遍歷完整個陣列,min中就是陣...

Linux資料結構 迷宮(多條出口且不帶環)

之前有說過一條簡單的迷宮之路求解 只有一條出路且不帶環 這一篇講的是如何處理多條出路的情況。主要思路 借用兩個棧,乙個儲存當前出路的路徑點,乙個儲存最短的出路的路徑點。每找到一條出路則對比最短出路,哪一條路短,則存到最短路徑棧中。首先我們先初始化乙個棧 void mazeinitshortpath ...