oj記錄-1 確認感染羣體集合

#include<iostream>
#include<stdio.h>
using namespace std;
int merge(int v[100][100], int index, int N){
	int tmp[100][100];
	int i = 0, j = 0, k = 0, l = 0;
	int tmp_idx = 0;
	int flag = 0;
	int count = 0;
	for (i = 0; i < 100; i++){
		memset(tmp[i], 0, sizeof(int) * 100);
	}
	
	for (i = 0; i < N; i++){
		tmp[0][i] = v[0][i];
	}
	
	for (i = 1; i < index; i++)
	{
		for (l = 0; l < tmp_idx + 1; l++)
		{
			for (j = 0; j < N; j++){
				if (tmp[l][j] == v[i][j] && v[i][j]==10)
				{
					for (k = 0; k < N; k++){
						if (tmp[l][k] != 10 && v[i][k] == 10)
							tmp[l][k] = v[i][k];
					}
					flag = 1;
					break;
				}
			}
			if (flag) break;

		}
		if (j == N)
		{
			tmp_idx++;
			for (k = 0; k < N; k++){
				tmp[tmp_idx][k] = v[i][k];
			}
		}
	}
	for (i = 0; i < tmp_idx + 1; i++){
		for (j = 0; j < N; j++){
			if (tmp[i][j] == 10){
				count++;
			}
		}
	}
	if (count == N) return tmp_idx + 1;
	else return tmp_idx + 2;
}

int func_relate(int v[100][100], int index, int array_index, int array_relate_index){
	int flag = 0;
	for (int k = 0; k < index + 1; k++)
	{
		if (v[k][array_index] == 10 || v[k][array_relate_index] == 10)
		{
			v[k][array_index] = 10;
			v[k][array_relate_index] = 10;
			flag = 0;
			break;
		}
		else{
			flag = 1;
		}
	}
	if (flag)
	{
		v[index][array_index] = 10;
		v[index][array_relate_index] = 10;
		index++;
	}
	return index;
}

int main()
{
	int N = 0;
	int index = 0;
	int **a = NULL;
	int v[100][100];
	int flag[2] = { 0 };

	for (int i = 0; i < 100; i++)
		memset(v[i], 0, sizeof(int) * 100);

	cin>>N;
	a = new int *[N];
	for (int i = 0; i < N; i++){
		a[i] = new int[N];
	}
	for (int i = 0; i < N; i++){
		for (int j = 0; j < N; j++){
			cin >> a[i][j];
		}
	}

	for (int i = 0; i < N; i++){
		for (int j = 0; j < N; j++){
			if (a[i][j] == 1 && i !=j)
			{
				index = func_relate(v, index, i, j);
			}
		}
	}
	cout << merge(v, index, N) << endl;
	if (a){
		for (int i = 0; i < N; i++){
			if(a[i]) delete [] a[i];
		}
		delete []a;
		a = NULL;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章