zoukankan      html  css  js  c++  java
  • hdu1241(bfs)

    搜索题,看上去并查集也可解,不过还是感觉bfs()简单些,不过在处理数组map[x][y]时被伤着了,在处理下标时,把横坐标,纵坐标,x,y,完全懵了,习惯上把x当成纵坐标y当成横坐标,这里建的map[][]中的x其实是纵坐标,y是横坐标,显然还是太嫩了(继续革命)

    #include <iostream>
    #include <queue>
    using namespace std;
    const int Max=101;
    char map[Max][Max];
    int used[Max][Max];
    int dir[8][2]={
    {0,1},{1,1},{1,0},{1,-1},
    {0,-1},{-1,-1},{-1,0},{-1,1}
    };
    queue <int> q;
    void Bfs(int m,int n)
    {
    while(!q.empty())
    q.pop();
    int i,j,k;
    int count=0;
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    {
    if(map[i][j]=='@'&&used[i][j]==0)
    {
    //cout<<"lskjs"<<endl;
    int x,y,s,r;
    q.push(i*n+j);
    while(!q.empty())
    {
    int head;
    head=q.front();///////////////////////////////////////////////////////////////////////
    s=head/n;// 纵zuo biao
    r=head%n;//横 zuob 标
    q.pop();
    for(k=0;k<8;k++)
    {
    y=r+dir[k][0];//横坐标
    x=s+dir[k][1];//纵坐标
    // cout<<"ce:"<<x<<" "<<y<<endl;
    if(x>=0&&x<m&&y>=0&&y<n&&map[x][y]=='@'&&used[x][y]==0)
    {
    //cout<<"shi:"<<x<<" "<<y<<endl;
    used[x][y]=1;
    q.push(x*n+y);
    }
    }

    } count++;
    }
    }
    cout<<count<<endl;
    }
    int main()
    {
    int m,n;
    while(cin>>m&&m!=0)
    {
    int i,j;
    cin>>n;
    memset(used,0,sizeof(used));
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    {
    cin>>map[i][j];
    }
    Bfs(m,n);

    }
    return 0;
    }
  • 相关阅读:
    希尔排序例子
    C
    重构最大堆的例子
    基于堆的优先队列和用优先队列排序的例子
    堆排序例子
    分治法示例
    三路划分的快速排序算法
    二叉搜索例子
    标准快速排序
    【转载】JAVA5新特性
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2415699.html
Copyright © 2011-2022 走看看