フォーチュン法の基本は、タイトルの左の島をclass5- 5

1.タイトル:問題アイランド

有する行列を求めて、この部分が島と呼ばれ、2つだけの行列の値0と1の種類、及び各位置はアップ所有することができるが、下、左、と一緒に1がある場合、右位置は、接続されています。どのように多くの島?
たとえば:
0 0 0 1 1 0
。1 1 1 0 0 1
。1 1 0 0 0 0
0 0 0 0 0 0
行列は、3つの島を有します。

2.分析

この質問を考えることは非常に簡単で、行列の各要素が横断されます。現在の要素が1である場合には、島プラス1の数は、その後、2の現在の要素は、(島が記録されていたことを示している)、その要素の4上下再帰検索1の要素がある場合は、2(フェーズに進みます)1○同じ島である、それはにわたって記録された、常に上下4つの再帰的な要素についての要素が1ではないか、境界の外を見るまでは。

3.コアコード

(1)再帰島

私たちは、再帰関数はに感染として定義され、要素FOUNDが1である場合、機能と同じ機能を感染さは、1の値の周りの四つの要素の要素があるかどうかを見続けています。
注:
条件①再帰直接戻り、クロスボーダー要素のアレイであり、電流値が1ではありません。
②再帰的に2〜第現在の要素値に必要、またはループを探し続けます

void infect(int a[][width],int j,int i)  //传二维数组需将第二维指定
{
	if(j < 0||j >= width ||i < 0|| i >= height || a[i][j] != 1)
		return;
	a[i][j] = 2;
	//查找上下左右四个元素
	infect(a,j - 1,i);
	infect(a,j + 1,i);
	infect(a,j,i - 1);
	infect(a,j,i + 1);
}

(2)島の需要の数

私たちが値1の要素の要素を見つけた場合、マトリックスを通過するためには、島の数が1増加し、島全体を検索する再帰関数を呼び出します。最後に、島の数を返します。

int countIslands(int a[][width])
{
	int num = 0;
	for(int i = 0;i < height;i++)
	{
		for(int j = 0;j < width;j++)
		{
			if(a[i][j] == 1)
			{
				num++;
				infect(a,j,i);
			}
		}
	}
	return num;
}

4.完全なコード

#include<iostream>
//#include<vector>
using namespace std;
#define width 6
#define height 4

void infect(int a[][width],int j,int i)
{
	if(j < 0||j >= width ||i < 0|| i >= height || a[i][j] != 1)
		return;
	a[i][j] = 2;
	infect(a,j - 1,i);
	infect(a,j + 1,i);
	infect(a,j,i - 1);
	infect(a,j,i + 1);
}

int countIslands(int a[][width])
{
	int num = 0;
	for(int i = 0;i < height;i++)
	{
		for(int j = 0;j < width;j++)
		{
			if(a[i][j] == 1)
			{
				num++;
				infect(a,j,i);
			}
		}
	}
	return num;
}

int main()
{
	int a[height][width] = {
		{0,0,1,0,1,0},
		{1,1,1,0,1,0},
		{1,0,0,1,0,0},
		{0,0,0,0,0,0}};
	cout<<countIslands(a);

	system("pause");
	return 0;
}

5.拡張子:パラレル問題

あなたは行列を解決する方法の多くを求める場合。並列思考を使用して、島は別途、n個に分割されています。国境に隣接島が1である場合、各部分が別々に記録されるため、国境の島は、考慮される可能性が高くなります、それの合計が過充電しました。、設計変数の各島の始まりを記録:ソリューションにあります。そのような再検査する際の境界は、二つの異なる島が開始位置場合、島の数マイナス1(実際に島)は、次いで、同じ2つの島は、開始位置マージ。

公開された51元の記事 ウォンの賞賛1 ビュー1367

おすすめ

転載: blog.csdn.net/shi_xiao_xuan/article/details/104226582