你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
HOJ 3130 Qie-Gao -----------BFS
 
HOJ 3130 Qie-Gao
[cpp]  
//题意:此处略去好多字  
//思路:BFS 记录搜索的起点和终点,  
//      然后把他们所围的矩形的大小求出,然后再与搜索的步数比较,如果相等,说明这是切糕,不等不是  
//hint:......  
//     做啦一天搜索题目,这个题最有快感啦,一次a,貌似没有什么收获,  
//     大一的秋季校赛题,表示也不过如此啊,为什么我当年校赛只a啦一题,擦,睡觉,哈哈  
#include<iostream>  
#include<queue>  
#include<cstring>  
#define maxlen 1010  
using namespace std;  
int mat[maxlen][maxlen];  
int dir[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};  
inline int abs(int a)  
{  
    return a > 0 ? a : -a;  
}  
struct node  
{  
    int x;  
    int y;  
};  
int BFS(node s,int m,int n)  
{  
    node ne,ol,dr;  
    int ans=0;  
    queue<node> q;  
    while(!q.empty())  
    {  
        q.pop();  
    }  
    q.push(s);  
    mat[s.x][s.y]=0;  
    while(!q.empty())  
    {  
        ol=q.front();  
        q.pop();  
        dr.x=ol.x;  
        dr.y=ol.y;  
        ans++;  
        for(int i=0; i<4; i++)  
        {  
            ne.x=ol.x+dir[i][0];  
            ne.y=ol.y+dir[i][1];  
            if(ne.x<0||ne.y<0||ne.x>m-1||ne.y>n-1||mat[ne.x][ne.y]==0)continue;  
            else  
            {  
                mat[ne.x][ne.y]=0;  
                q.push(ne);  
            }  
        }  
    }  
    if(ans!=(abs(s.x-dr.x)+1)*(abs(s.y-dr.y)+1)) return -1;  
    else return ans;  
}  
int main()  
{  
    bool flag;  
    int m,n,i,j,sum,count;  
    char k;  
    node s;  
    while(cin >> m >> n&&m&&n)  
    {  
        memset(mat,0,sizeof(mat));  
        flag=true,sum=0;  
        for(i=0; i<m; i++)  
            for(j=0; j<n; j++)  
            {  
                cin >> k;  
                if(k=='#') mat[i][j]=1;  
            }  www.2cto.com
<m; i++)  
            for(j=0; j<n; j++)  
                if(mat[i][j]==1)  
                {  
                    s.x=i;  
                    s.y=j;  
                    count=BFS(s,m,n);  
                    if(count>0) sum++;  
                    else flag=false;  
                }  
        if(flag)  cout << sum << endl;  
        else cout <<"Oh!My God!" << endl;  
    }  
    return 0;  
}  
  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089