POJ-1562石油鉱床(油田-dfs)

問題の説明
GeoSurvComp地質調査会社は、地下の石油鉱床の検出を担当しています。GeoSurvCompは、一度に1つの大きな長方形の土地領域を処理し、土地を多数の正方形のプロットに分割するグリッドを作成します。次に、検知装置を使用して各区画を個別に分析し、区画に油が含まれているかどうかを判断します。油を含む区画はポケットと呼ばれます。2つのポケットが隣接している場合、それらは同じ石油鉱床の一部です。石油鉱床は非常に大きくなる可能性があり、多数のポケットが含まれる場合があります。あなたの仕事は、グリッドに含まれるさまざまな石油鉱床の数を決定することです。

入力
入力には、1つ以上のグリッドが含まれています。各グリッドは、単一のスペースで区切られた、グリッド内の行と列の数であるmとnを含む行で始まります。m = 0の場合、入力の終了を示します。それ以外の場合は、1 <= m <= 100および1 <= n <= 100です。これに続いて、それぞれn文字のm行が続きます(行末文字はカウントされません)。各文字は1つのプロットに対応し*', representing the absence of oil, or、オイルポケットを表す@ 'のいずれかです。

出力
は、水平、垂直、または斜めに隣接しています。石油鉱床には100個を超えるポケットは含まれません。

サンプル入力

1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5 
****@
*@@*@
*@**@
@@@*@
@@**@
0 0

サンプル出力

0
1
2
2

題名:

これは、「@」が石油が検出された場所を表し、「*」が石油がない場所を表すマップを提供するためのものです。これで、タイトルに油田の定義が示されます。接続されているすべての「@」は油田を表し、接続の定義には共通のポイントまたは共通のエッジがあります。主題の要件は、マップ上の油田の数を出力することです。

アイデア:

タイトルでのリンクの定義には、共通のポイントまたは共通のエッジがあるためです。最初に「@」を見つけてからその近くの@を探す必要があるので、方向配列を設定して検索の方向を制御し、油田でエラーが繰り返し検索されないようにマークを付けることができます。(全体的な考え方は、最初に@を見つけてから、反時計回りに検索してマークを見つけ、反時計回りに検索することです)。

ACコード

#include<stdio.h>
char a[101][101];
int m,n;
int xy[8][2] = {
    
    {
    
    1,0},{
    
    1,1},{
    
    0,1},{
    
    -1,1},{
    
    -1,0},{
    
    -1,-1},{
    
    0,-1},{
    
    1,-1}};//逆时针方向进行遍历 
void dfs(int x,int y); 
 
int main()
{
    
    
	int i,j,t;
    while(scanf("%d%d",&m,&n)&&(m!=0&&n!=0))
    {
    
    
        t=0;
        for(i=0;i<m;i++)
       {
    
    
	   		scanf(" %s",a[i]);
		}
        for(i=0;i<m;i++)
        {
    
    
        	for(j=0;j<n;j++)
            {
    
    
                if((a[i][j]=='@'))
                {
    
    
                	dfs(i,j);
                	t++;
				}
            }
		}
        printf("%d\n",t);
    }
    return 0;
}
void dfs(int x,int y)
{
    
    
	int i;
    if((x>=0||x<m||y>=0||y<n)&&(a[x][y]=='@'))//查看是否超出边界 
    {
    
    
    	a[x][y]='#';//标记,防止寻找相邻的时重复遍历消耗时间和出现错误  
    	for(i=0;i<=7;i++)//按照逆时针方向进行遍历寻找是否有相邻的'@' 
    	{
    
    
			 dfs(x+xy[i][0],y+xy[i][1]); 
   		 } 
    } 
}

おすすめ

転載: blog.csdn.net/weixin_46703995/article/details/108877461