※ 과제 때문에 공부했던 것 정리

※ NetworkX 라이브러리 설치 필요

https://networkx.github.io/



위 그래프에서 1부터 6까지 가는 최단 경로와 길이를 구한다고 가정

최단 경로는 1 -> 4 -> 3 -> 6, 길이는 16이 나와야 함.


(1,3,6=18, 1,2,5,6=19, 1,4,3,5,6=20, 1,2,5,3,6=31... 이기 때문)


import networkx as nx
import matplotlib.pyplot as plt

# Directed Graph 사용했음
G = nx.DiGraph()

# G 그래프 만들기
# G.add_edge(node_i, node_k, distance=X)

if nx.has_path(G, sourceNode, targetNode):
    length = nx.shortest_path_length(G, source=sourceNode, target=targetNode, weight='distance')
    path = nx.shortest_path(G, source=sourceNode, target=targetNode, weight='distance')

# 아래는 그래프로 표현하는 법
pos=nx.spring_layout(G)
nx.draw(G, pos=pos, with_labels=True)

labels = nx.get_edge_attributes(G,'distance')
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)

plt.savefig("graph.png")
plt.show()


length는 16

path는 ['1', '4', '3', '6']


nx.shortest_path_length가 최단 경로 길이 구하는 함수 (실수)

nx.shortest_path가 최단 경로 구하는 함수 (['A', 'B', 'C'] 형식)

(위 함수들은 dijkstra 알고리즘 사용)


사용법은 그래프 G, 출발 노드, 도착 노드, weight 지정하면 끝

저작자 표시 비영리 변경 금지
신고




import matplotlib.pyplot as plt

x = range(1, 6)
y1 = [0.01, 0.019, 0.042, 0.038, 0.062]  # 함수로 해도 됨
y2 = [0.02, 0.021, 0.03, 0.036, 0.044]
plt.plot(x, y1, label="Label 1")  # y1 데이터 라벨
plt.plot(x, y2, label="Label 2")  # y2 데이터 라벨
plt.xlabel("X Label")  # X 축 라벨
plt.ylabel("Y Label")  # Y 축 라벨
plt.title('Title')
plt.legend()  # Places a legend(범례) on the axes.
plt.show()


저작자 표시 비영리 변경 금지
신고




※ 폰트는 굵고 큰 게 좋음


TEXT


저작자 표시 비영리 변경 금지
신고



http://keycode.info/ 에서 키코드 int 확인


function ignore(e) {
    e = e || window.event;

    if (e.keyCode == '123') { // F12
	    // F12 버튼 비활성화
        e.returnValue=false;
        e.cancel = true;
    }
	
	if (e.keyCode == '27') { // ESC

	}
}


저작자 표시 비영리 변경 금지
신고


사이트 접속하자마자 자동 재생됨 (순서 랜덤), HTML5 audio(id=player) 위젯 삽입 필요


HTML5 기본 위젯뿐만 아니라 커스텀 플레이 버튼이 있을 경우를 위함 (오디오 소스 플레이하고 재생 중인 곡 정보 얻기)


playinginfo  현재 재생하는 곡 정보

shuffle 함수 링크 (stackoverflow - Jeff)


var player;

// 오디오 파일 리스트
var audioFiles = [
   'music/1.mp3',
   'music/2.mp3',
   'music/3.mp3'
];

//방문할 때마다 순서 다르게
function shuffle(a) {
   var j, x, i;
   for (i = a.length; i; i--) {
	   	j = Math.floor(Math.random() * i);
	   	x = a[i - 1];
	   	a[i - 1] = a[j];
	   	a[j] = x;
   }
}

// 현재 재생 곡 정보 manually 불러오기
var playinginfo;
var lists = [
	'제목1 - 아티스트1',
	'제목2 - 아티스트2',
	'제목3 - 아티스트3'
];

function preloadAudio(url) {
   var audio = new Audio();
   audio.addEventListener('canplaythrough', loadedAudio, false);
   audio.src = url;
}

var loaded = 0;
function loadedAudio() {
   loaded++;
   if (loaded == audioFiles.length){
      // 전부 로드됐으면 플레이
      init();
   }
}

function play(index) {
   player.src = audioFiles[index];
   getSRC();
   player.play();
}

var i = 0;
function init() {
   play(i);

   player.onpause = function() {
       // 커스텀 플레이 버튼 조작 (toPlay Icon)
   };
   player.onended = function() {
       next();
   };
   player.onplay = function() {
	   if (!player.seeking) {
		   // 커스텀 플레이 버튼 조작 (toPause Icon)
	   }
   };
}

function next() {
   i++;
   if (i >= audioFiles.length) {
      i = 0;
   }
   play(i);
}

function getSRC() {
   switch (player.src) {
   case "사이트주소/music/1.mp3": //ex) ttt.com/music/1.mp3
	   playinginfo = lists[0]; // 제목1 - 아티스트1'
	   break;

   case "사이트주소/music/2.mp3":
	   playinginfo = lists[1];
	   break;
   case "사이트주소/music/3.mp3":
	   playinginfo = lists[2];
	   break;
   default:
	   playinginfo = "알 수 없음";
	   break;
   }
}

// 아래 부분은 onload 부분에 추가
// 오디오 목록 셔플
shuffle(audioFiles);

// player 아이디를 가진 오디오 ex) 
player = document.getElementById('player');
for (var i in audioFiles) {
	preloadAudio(audioFiles[i]);
}
// onload 끝



저작자 표시 비영리 변경 금지
신고

티스토리 툴바