zoukankan      html  css  js  c++  java
  • BFS模版

    http://acm.hdu.edu.cn/showproblem.php?pid=1241

    STL queue模版

     1 #include<iostream>
     2 #include<queue>
     3 #include<algorithm>
     4 #include<stdio.h>
     5 #include<string.h>
     6 #define maxn 101
     7 using namespace std;
     8 typedef struct
     9 {
    10     int x,y;
    11 }Node;
    12 Node node[maxn];
    13 int n,m,cnt=0;
    14 int dir[8][2]={0,1,1,0,0,-1,-1,0,1,-1,-1,1,-1,-1,1,1};
    15 int vis[maxn][maxn];
    16 char map[maxn][maxn];
    17 int is_ok(Node s)
    18 {
    19    if(map[s.x][s.y]=='*')
    20     return 0;
    21    if(vis[s.x][s.y])
    22     return 0;
    23    if(s.x<0||s.x>=n||s.y<0||s.y>=m)
    24     return 0;
    25    return 1;
    26 }
    27 queue<Node>q;
    28 void bfs(Node st)
    29 {
    30    Node now,next;
    31    q.push(st);
    32  vis[st.x][st.y]=1;
    33    while(!q.empty())
    34    {
    35        now=q.front();
    36        for(int i=0;i<8;i++)
    37        {
    38            next.x=now.x+dir[i][0];
    39            next.y=now.y+dir[i][1];
    40            if(is_ok(next))
    41            {
    42                q.push(next);
    43                vis[next.x][next.y]=1;
    44            }
    45        }
    46        //printf("%d %d
    ",next.x,next.y);
    47        q.pop();
    48    }
    49 }
    50 int main()
    51 {
    52    //freopen("in.txt","r",stdin);
    53     while(scanf("%d",&n)!=EOF&&n)
    54     {
    55         scanf("%d",&m);
    56         for(int i=0;i<n;i++)
    57             scanf("%s",map[i]);
    58         cnt=0;
    59         memset(vis,0,sizeof(vis));
    60         Node no;
    61         for(int i=0;i<n;i++)
    62             for(int j=0;j<m;j++)
    63         {
    64             if(map[i][j]=='@'&&!vis[i][j])
    65                 {
    66                     no.x=i;
    67                     no.y=j;
    68                     bfs(no);
    69                     cnt++;
    70                 }
    71         }
    72         printf("%d
    ",cnt);
    73     }
    74     return 0;
    75 }

     数组模拟队列模版

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<queue>
     5 #define maxn 101
     6 using namespace std;
     7 char map[maxn][maxn];
     8 int vis[maxn][maxn];
     9 int dir[8][2]={1,0,0,1,-1,0,0,-1,1,-1,-1,1,1,1,-1,-1};
    10 int n,m,cnt=0;
    11 typedef struct
    12 {
    13     int x,y;
    14 }Node;
    15 Node node[maxn];
    16 int is_ok(Node s)
    17 {
    18     if(s.x<0||s.x>=n||s.y<0||s.y>=m)
    19         return 0;
    20     if(map[s.x][s.y]=='*')
    21         return 0;
    22     if(vis[s.x][s.y])
    23         return 0;
    24     return 1;
    25 }
    26 //queue<Node>q;
    27 Node q[maxn*maxn];
    28 void bfs(Node s)
    29 {
    30     int front=0,rear=1;
    31     q[front].x=s.x;
    32     q[front].y=s.y;
    33     vis[s.x][s.y]=1;
    34     while(front<rear)
    35     {
    36         Node now,next;
    37         now.x=q[front].x;
    38         now.y=q[front].y;
    39         front++;
    40         for(int i=0;i<8;i++)
    41         {
    42             next.x=now.x+dir[i][0];
    43             next.y=now.y+dir[i][1];
    44             if(is_ok(next))
    45             {
    46                 q[rear].x=next.x;
    47                 q[rear].y=next.y;
    48                 rear++;
    49                 vis[next.x][next.y]=1;
    50             }
    51         }
    52     }
    53 }
    54 int main()
    55 {
    56     while(scanf("%d",&n)!=EOF&&n)
    57     {
    58         scanf("%d",&m);
    59         cnt=0;
    60         memset(vis,0,sizeof(vis));
    61         memset(q,0,sizeof(q));
    62         for(int i=0;i<n;i++)
    63             scanf("%s",map[i]);
    64         Node st;
    65         for(int i=0;i<n;i++)
    66             for(int j=0;j<m;j++)
    67         {
    68             if(map[i][j]=='@'&&!vis[i][j])
    69             {
    70                 st.x=i;
    71                 st.y=j;
    72                 bfs(st);
    73                 cnt++;
    74             }
    75         }
    76         printf("%d
    ",cnt);
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    字符串中去除连续相同的字符保留一个
    截取字符串中最后一个中文词语(MS SQL)
    WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive).
    Unexpected error from external database driver (1)
    RDLC报表显示存储于数据库的图片
    从angularjs传递参数至Web API
    angularjs呼叫Web API
    创建Web API并使用
    打印网页中某一段内容
    在angularjs实现一个时钟
  • 原文地址:https://www.cnblogs.com/lyf123456/p/3617281.html
Copyright © 2011-2022 走看看