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 ...