가중 그래프
/*
1 2 3 4 5
1 0 1 1 0 1
2 1 0 0 1 1
3 1 0 0 1 1
4 0 1 1 0 1
5 1 1 1 1 0
*/
#include <stdio.h>
#define ROW 5
#define COL 5
#define TRUE 1
#define AND &&
void sorting_function(int[][COL]);
int main(void) {
int villige[5][5] = { 0, };
int index_i, index_j;
for (index_i = 0; index_i < ROW; index_i++) {
for (index_j = index_i; index_j < COL; index_j++) {
if (index_i == index_j) {
villige[index_i][index_j] = 0;
}
else {
printf("[%c][%c] villige[%d][%d] = ",
(char)index_i + 65, (char)index_j + 65, index_i, index_j);
scanf_s("%d", &villige[index_i][index_j]);
villige[index_j][index_i] = villige[index_i][index_j];
}
}
}
/*
//Echo printf
for (index_i = 0; index_i < ROW; index_i++) {
for (index_j = 0; index_j < COL; index_j++) {
printf("%d ", villige[index_i][index_j]);
if (index_j == COL - 1) {
printf("\n");
}
}
}
*/
sorting_function(villige);
return 0;
}
void sorting_function(int A_RRAY[][COL]) {
int i, j, k; // index
int index = 0;
int road = 0;
int result = 0;
int vil_start = 0;
int vil_stop = 0;
int temp = 0;
int i_; //일시적으로 col 을 담을 값
// Echo printf
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
printf("%d ", A_RRAY[i][j]);
if (j == COL - 1) {
printf("\n");
}
}
}
printf("시작 마을 입력: ");
scanf_s("%d", &vil_start);
printf("도착 마을 입력: ");
scanf_s("%d", &vil_stop);
/*
1 2 3 4 5
1 0 0 1 0 1
2 0 0 0 1 1
3 1 0 0 1 1
4 0 1 1 0 1
5 1 1 1 1 0
*/
//road 누적 값
//index = 0
if (A_RRAY[vil_start][vil_stop] != 0) {
road += A_RRAY[vil_start][vil_stop];
}
else {
//A_RRAY[vil_start][vil_stop] == 0
/*
이 경우는 출발 마을과 도착 마을이 바로 연결되지 않은 경우이다.
출발 지점에서 시작하기로 한다.
*/
k = vil_start;
while (TRUE) {
for (index = 0; index < 5; index++) {
if (index == vil_stop) {
if (A_RRAY[k][index] != 0) {
road += A_RRAY[k][index];
goto end_;
}
}
else {// index != vil_stop
if (temp == 0 AND A_RRAY[k][index] != 0) {
result = A_RRAY[k][index]; //일시적으로 값을 담는다.
temp = 1;
i_ = index;
}
else if (temp != 0 AND A_RRAY[k][index] != 0) {
if (result > A_RRAY[k][index]) {
result = A_RRAY[k][index];
i_ = index;
}
}
}
}
A_RRAY[k][i_] = 0;
k = i_; // ROW 값 교체
road += result;
}
end_:;
}
printf("road %d\n", road);
}