본문 바로가기

대학교시절

알고리즘 과제 #4 (그래프 최소 경로 구하기)

문제 :   무선 센서 네트워크에서 감시 노드들의 집합 구하기 


무선 센서 네트워크에서 센서들은 서로 교신하며 일을 해야 하므로 네트워크 공격에 취약한데 이러한 공격을 막기 위해 보통 사용하는 기법이 행위 기반 탐지이다. 특별한 감시 노드들이 이웃 노드들이 합법적인지를 알기 위해 이웃의 교신을 감청하고, 공격이 탐지되면 경고 메시지를 감시 노드들만으로 이루어진 경로를 따라 관리를 담당하는 싱크 노드로 전달하게 된다. 


무선 센서 네트워크는 그래프 G = (V, E)로 표현할 수 있는 데, 여기서 V는 센서 노드들의 집합이고 E는 통신 링크들의 집합이다. 임의의 노드 u에 대해 A(u)를 u와 인접한 노드들의 집합이라 한다. X를 노드들의 집합이라 할 때 X와 인접한 노드들의 집합 A(X) = A(u)이다. 

싱크 노드를 v1이라하고 감시 노드 수의 상한 K(싱크 노드 제외)가 주어졌을 |A(X)|가 최대가 되는 감시 노드의 집합 X와 A(X)를 구하는 그리디 알고리즘을 작성하라. 단, X 안에 있는 감시 노드들은 모두 연결되어 있다.


예) K = 2이라 할 때 그림 1의 예에서 X = {1, 3, 7}, A(X) = {1, 2, 3, 7, 8, 9, 10} 또는 X = {1, 2, 3}, A(X) = {1, 2, 3, 4, 5, 6, 7}이 된다. 



입력


입력 파일의 이름은 input.txt이다 .여러 개의 테스트 데이터가 입력될 수 있다. 첫째 줄에는 테스트 데이터의 개수가 입력된다. 첫 번째 데이터가 두 번째 줄부터 부터 주어지는데 K가 주어지고,  그 다음 줄에는 노드의 개수 n이 주어지고, 그 다음 n개의 줄에 무선 네트워크의 인접행렬이 주어진다. 같은 방식으로 다음 데이터들이 주어진다.



출력


각 데이터에 대해 X와 A(X)를  두 줄에 출력한다.



입력 예


2 데이터의 개수

2 첫 번째 데이터의 K 값

10 노드의 수

1 1 1 0 0 ..... 인접 행렬

1 1 0 1 1 .....

......

10 두 번째 데이터의 K 값

100 노드의 수

1 0 0 1 1 ...... 인접 행렬

0 0 0 1 0 ......

......


출력 예


1 3 7 

1 2 3 7 8 9 10

1 6 7 13 16 25 37 45 67 88 

1 5 6 7 13 ........



소스코드




보고서 파일


무선 센서 네트워크에서 감시 노드들의 집합 구하기 _by_AmericanoJH.pdf