常用算法模板
本文最后更新于:2 年前
DFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| DFS:
#include<cstdio> #include<cstring> #include<cstdlib> using namespace std; const int maxn=100; bool vst[maxn][maxn]; int map[maxn][maxn]; int dir[4][2]={0,1,0,-1,1,0,-1,0}; bool CheckEdge(int x,int y) { if(!vst[x][y] && ...) return 1; else return 0; } void dfs(int x,int y) { vst[x][y]=1; if(map[x][y]==G) { ...... return; } for(int i=0;i<4;i++) { if(CheckEdge(x+dir[i][0],y+dir[i][1])) dfs(x+dir[i][0],y+dir[i][1]); } return; } int main() { ...... return 0; }
|
BFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; const int maxn=100; bool vst[maxn][maxn]; int dir[4][2]={0,1,0,-1,1,0,-1,0}; struct State { int x,y; int Step_Counter; }; State a[maxn]; boolCheckState(State s) { if(!vst[s.x][s.y] && ...) return 1; else return 0; } void bfs(State st) { queue <State> q; State now,next; st.Step_Counter=0; q.push(st); vst[st.x][st.y]=1; while(!q.empty()) { now=q.front(); if(now==G) { ...... return; } for(int i=0;i<4;i++) { next.x=now.x+dir[i][0]; next.y=now.y+dir[i][1]; next.Step_Counter=now.Step_Counter+1; if(CheckState(next)) { q.push(next); vst[next.x][next.y]=1; } } q.pop(); } return; } int main() { ...... return 0; }
|