[이 글은 이전에 쓰던 블로그에서 작성된 이후 새 블로그로 이전된 글입니다.]
원더플에서도 확인하실 수 있습니다.
JAVA 버전을 플래시로 포팅한 버전입니다.
JAVA 버전과는 달리 그래프 생성까지 내부에서 처리하며, 항상 연결 그래프를 생성합니다.
플래시 버전에서는 드래그 가능 범위가 조금 더 제한되어 있습니다.
[이 글은 이전에 쓰던 블로그에서 작성된 이후 새 블로그로 이전된 글입니다.]
원더플에서도 확인하실 수 있습니다.
JAVA 버전을 플래시로 포팅한 버전입니다.
JAVA 버전과는 달리 그래프 생성까지 내부에서 처리하며, 항상 연결 그래프를 생성합니다.
플래시 버전에서는 드래그 가능 범위가 조금 더 제한되어 있습니다.
[이 글은 이전에 쓰던 블로그에서 작성된 이후 새 블로그로 이전된 글입니다.]
JAVA를 사용해 구현한 Force-Directed Graph Drawing입니다.
프로젝트 이름에 ‘Forced’라고 오타가 있습니다 ㅜㅠ
노드를 드래그 할 수 있습니다.
input.txt에서 그래프 데이터를 읽어오며, 형식은 다음과 같습니다.
[이 글은 이전에 쓰던 블로그에서 작성된 이후 새 블로그로 이전된 글입니다.]
Force-Directed Graph Drawing는 그래프 시각화 중 한 방법으로써 노드들끼리는 척력을, 에지로 연결된 노드에는 인력을 적용시키는 방법입니다.
보통 노드끼리의 반발력은 전하(쿨롱의 법칙) 형태로 적용시키고, 에지로 연결된 노드끼리의 인력은 용수철(훅의 법칙) 형태로 적용시키게 됩니다.
Force-Directed Graph Drawing의 장점은 다음과 같습니다.
단점은 다음과 같습니다.
[이 글은 이전에 쓰던 블로그에서 작성된 이후 새 블로그로 이전된 글입니다.]
정점 개수와 간선 개수를 입력하면 그에 맞게 그래프의 정보를 생성해 주는 프로그램입니다.
첫 줄에 정점 개수와 간선 개수를 출력하고, 그 아래줄에 연결된 간선들 사이의 정보를 출력해줍니다.
중복된 간선은 출력하지 않는데, 간선 개수가 그 정점 개수로 나올 수 있는 총 간선의 수보다 많다면 프로그램이 끝나지 않는 버그(?)가 있습니다.
from random import randrange n, m = map(int, raw_input().split()) print n, m dict = {} for i in range(m): a, b = randrange(0, n), randrange(0, n) s = tuple(sorted((a,b))) while a==b or s in dict: a, b = randrange(0, n), randrange(0, n) s = tuple(sorted((a,b))) dict[s] = 1 print a, b