#include<iostream>
#include<stdio.h>
#include<set>
#include<algorithm>
using namespace std;
int search(int **table, int a[100], int N, int M, int T){
set<int>b;
set<int>::iterator iter;
set<int>tmp_b;
int index = 0;
int i = 0, j = 0, k = 0;
//第一層感染人羣確認
for (i = 0; i < M; i++)
{
for (j = 0; j < T; j++)
{
if (table[j][0] == a[i]){
for (k = 0; k < M; k++){
if (table[j][1] == a[k]) break;
}
if (k == M) b.insert(table[j][1]);
}
if (table[j][1] == a[i])
{
for (k = 0; k < M; k++)
{
if (table[j][0] == a[k]) break;
}
if (k == M) b.insert(table[j][0]);
}
}
}
for (iter = b.begin(); iter != b.end(); ++iter){
tmp_b.insert(*iter);
}
//第二層感染人羣確認
for (iter = tmp_b.begin(); iter != tmp_b.end(); ++iter)
{
for (j = 0; j < T; j++)
{
if (table[j][0] == *iter){
for (k = 0; k < M; k++){
if (table[j][1] == a[k]) break;
}
if (k == M) b.insert(table[j][1]);
}
if (table[j][1] == *iter)
{
for (k = 0; k < M; k++)
{
if (table[j][0] == a[k]) break;
}
if (k == M) b.insert(table[j][0]);
}
}
}
//輸出可疑感染人羣
for (iter = b.begin(); iter != b.end(); ++iter)
{
cout << *iter << " ";
}
return 0;
}
int main()
{
int N = 0, M = 0, T = 0;
int **table = NULL;
int a[100];
memset(a, 0, sizeof(a));
cin >> N >> M >> T;
table = new int *[T];
for (int j = 0; j < T; j++)
{
table[j] = new int[2];
}
for (int i = 0; i < M; i++)
{
cin >> a[i];
}
for (int i = 0; i < T; i++){
for (int j = 0; j < 2; j++){
cin >> table[i][j];
}
}
for (int i = 0; i < T; i++){
for (int j = 0; j < 2; j++){
cout << table[i][j] <<" ";
}
cout << endl;
}
search(table, a, N, M, T);
if (table)
{
for (int j = 0; j < 2; j++)
{
delete[] table[j];
}
delete[]table;
}
return 0;
}
oj-2找出可以感染者
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.