首页 > 代码库 > 挑战程序2.1.5 穷竭搜索>>宽度优先搜索(练POJ3669)
挑战程序2.1.5 穷竭搜索>>宽度优先搜索(练POJ3669)
先对比一下DFS和BFS
深度优先搜索DFS 宽度优先搜索BFS
明显可以看出搜索顺序不同。
DFS是搜索单条路径到底部,再回溯。
BFS是搜索近的状态,直到底部,一般在求解最短路径或者最短步数上应用。
BFS要用到队列呢。。
队列的用法看一看http://blog.csdn.net/cindywry/article/details/51919282
练习题系列………………………………………………………
题目:poj3669
因为步数(折返)的问题撸了一天。。
如果那个点可以走,那么就推入队列,等待搜索。
1 #include <stdio.h> 2 #include <queue> 3 #include <string.h> 4 using namespace std; 5 int map1[305][305],step[305][305]; 6 typedef pair<int, int> P; 7 struct stu{ 8 int x; int y; int t; 9 }; 10 struct stu ch[50002]; 11 12 int dx[5]={0, 1, 0, -1, 0}; 13 int dy[5]={0, 0, 1, 0, -1}; 14 15 void zha(int M) { 16 memset(map1, -1, sizeof(map1)); 17 for(int i = 0; i < M; i++) 18 for(int k = 0; k < 5; k++){//five points are burst. 19 int nx = ch[i].x + dx[k]; 20 int ny = ch[i].y + dy[k]; 21 if(nx >= 0 && nx < 303 && ny >= 0 && ny < 303 && (ch[i].t < map1[ny][nx] || map1[ny][nx] == -1)) 22 map1[ny][nx] = ch[i].t;//give everypoint the minimum burst time. 23 } 24 } 25 26 int bfs() { 27 queue <P> que; 28 que.push( P (0, 0)); 29 memset(step, -1, sizeof(step)); 30 step[0][0]=0; 31 while(que.size()) { 32 P p= que.front(); 33 que.pop(); 34 if(map1[p.first][p.second] == -1){//find map1‘s -1 and print it 35 return step[p.first][p.second]; 36 } 37 if(step[p.first][p.second] >= map1[p.first][p.second])continue;//the point had benn burst,so jump it 38 for(int i = 1; i < 5; i++) {//this is the point of four diretions that does not been destroy. 39 int nx = p.first + dx[i],ny = p.second + dy[i]; 40 if(nx>=0 && ny >=0 &&step[nx][ny] == -1)//if it can arrive and does not exceed the map 41 { 42 que.push(P(nx, ny));//push it to the queue and go 43 step[nx][ny]=step[p.first][p.second]+1;//of course,step must add 1 when go. 44 } 45 } 46 } 47 return -1; 48 } 49 50 int main() 51 { 52 int M,a; 53 while(~scanf("%d",&M)) 54 { 55 for(int i=0; i<M; i++) 56 scanf("%d%d%d",&ch[i].x,&ch[i].y,&ch[i].t); 57 zha(M); 58 a=bfs(); 59 printf("%d\n",a); 60 } 61 return 0; 62 }
挑战程序2.1.5 穷竭搜索>>宽度优先搜索(练POJ3669)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。