poj3984(BFS)

跟前面的几乎是一样的,不过这道题需要记录下路径

输出的时候从后往前找,找到第一个时开始输出,所以要用到递归

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <cstring>
 4 #define Max 0x7f7f7f7f
 5 using namespace std;
 6 
 7 
 8 int map[6][6];
 9 int visited[6][6];
10 int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
11 int ans[6][6];
12 int pre[30];
13 struct node
14 {
15     int x;
16     int y;
17 };
18 node path[30];
19 
20 
21 void output(int head)
22 {
23     int tmp=pre[head];
24     if(tmp==0)
25     {
26         printf("(%d, %d)\n",path[tmp].x,path[tmp].y);
27     }
28     else
29     {
30         output(tmp);
31     }
32      printf("(%d, %d)\n",path[head].x,path[head].y);
33 }
34 
35 void bfs()
36 {
37     memset(visited,0,sizeof(visited));
38     memset(ans,Max,sizeof(ans));
39     int head=0;
40     int tail=1;
41     pre[head]=-1;
42     path[head].x=0;
43     path[head].y=0;
44     visited[path[head].x][path[head].y]=1;
45     while(head<tail)
46     {
47         int x=path[head].x;
48         int y=path[head].y;
49         if(x==4 && y==4)
50         {
51             output(head);
52             return ;
53         }
54         for(int i=0;i<4;i++)
55         {
56             int xx=x+dir[i][0];
57             int yy=y+dir[i][1];
58             if(visited[xx][yy]==0 && xx>=0 && xx<5 && yy>=0 && yy<5 && map[xx][yy]!=1)
59             {
60                 path[tail].x=xx;
61                 path[tail].y=yy;
62                 pre[tail]=head;
63                 tail++;
64                 visited[xx][yy]=1;
65             }
66         }
67         head++;
68     }
69 
70 }
71 int main()
72 {
73     int i,j;
74     for(i=0;i<5;i++)
75     {
76         for(j=0;j<5;j++)
77         {
78             scanf("%d",&map[i][j]);
79         }
80     }
81     bfs();
82     return 0;
83 }

嗯,递归还是不太会用啊

posted on 2012-08-16 16:36  矮人狙击手!  阅读(725)  评论(0编辑  收藏  举报

导航