广搜简单题

来源:互联网 发布:java socket 文件传输 编辑:程序博客网 时间:2024/05/17 04:18

Catch That Cow

题目传送:POJ - 3278 - Catch That Cow

题解:点击即传送



迷宫问题

题目传送:POJ - 3984 - 迷宫问题

DFS也可以,见另一个题解

AC代码(BFS):

#include <map>#include <set>#include <cmath>#include <deque>#include <queue>#include <stack>#include <cstdio>#include <cctype>#include <string>#include <vector>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define INF 0x7fffffffusing namespace std;const int dx[] = {-1, 0, 1, 0};const int dy[] = {0, 1, 0, -1};int front, rear;struct node {    int x, y, pre;}q[105];int mp[5][5];int vis[5][5];void print(int x) {    if(q[x].pre != -1) {        print(q[x].pre);        printf("(%d, %d)\n", q[x].x, q[x].y);    }}void bfs(int x, int y) {    front = 0;    rear = 1;    q[front].x = x;    q[front].y = y;    q[front].pre = -1;    vis[x][y] = 1;    while(front < rear) {        for(int i = 0;  i < 4; i ++) {            int xx = q[front].x + dx[i];            int yy = q[front].y + dy[i];            if(xx >= 0 && xx < 5 && yy >= 0 && yy < 5 && mp[xx][yy] != 1 && !vis[xx][yy]) {                vis[xx][yy] = 1;                q[rear].x = xx;                q[rear].y = yy;                q[rear].pre = front;                rear ++;            }            if(xx == 4 && yy == 4) {                print(front);                return;            }        }        front ++;//出队     }}int main() {    memset(vis, 0, sizeof(vis));    for(int i = 0;  i< 5; i ++) {        for(int j = 0; j < 5; j ++) {            scanf("%d", &mp[i][j]);        }    }    printf("(0, 0)\n");    bfs(0, 0);    printf("(4, 4)\n");    return 0;}



0 0
原创粉丝点击