#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;
}
oj記錄-1 確認感染羣體集合
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.