ํฐ์คํ ๋ฆฌ ๋ทฐ
Programming/์๊ณ ๋ฆฌ์ฆ
[๊ทธ๋ํ] ์ธ์ ๋ฆฌ์คํธ, ์ธ์ ํ๋ ฌ (๋ฌด๋ฐฉํฅ)
ํด๋์๊ทธ 2021. 12. 7. 04:43
์ฝ๋:
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
typedef struct Vertex {
int vN;
struct Vertex* next;
}Vertex;
typedef struct Edge {
int weight;
Vertex* v1, * v2;
struct Edge* next;
}Edge;
typedef struct Graph{
Vertex* vHead;
Edge* eHead;
}Graph;
void init(Graph* G) {
G->vHead = NULL;
G->eHead = NULL;
}
void createVertex(Graph* G, int vN) {
Vertex* v = (Vertex*)malloc(sizeof(Vertex));
v->vN = vN;
v->next = NULL;
Vertex* q = G->vHead;
if (q == NULL)
G->vHead = v;
else {
while (q->next != NULL) {
q = q->next;
}
q->next = v;
}
}
void* findVertex(Graph* G, int vName) {
Vertex* p = G->vHead;
while (p->vN != vName) {
p = p->next;
}
return p;
}
void insertEdge(Graph* G, int w, int v1, int v2) {
Edge* e = (Edge*)malloc(sizeof(Edge));
e->weight = w;
e->v1 = findVertex(G, v1);
e->v2 = findVertex(G, v2);
e->next = NULL;
Edge* q = G->eHead;
if (q == NULL) {
G->eHead = e;
}
else {
while (q->next != NULL) {
q = q->next;
}
q->next = e;
}
}
void newInsertEdge(Graph* G, int w, int v1, int v2) {// ์ด๋ถ๋ถ ๋ค์๋ณด๊ธฐ
if (w == 0) {
return;
}
Edge* e = (Edge*)malloc(sizeof(Edge));
e->weight = w;
e->v1 = findVertex(G, v1);
e->v2 = findVertex(G, v2);
e->next = NULL;
Edge* q = G->eHead;
if (v1 <= q->v1->vN && v2 < q->v2->vN) {
e->next = G->eHead;
G->eHead = e;
}
else {
while (1) {
if (q->next->v1->vN >= v1) {
break;
}
q = q->next;
if (q->next == NULL) {
q->next = e;
return;
}
}
while (1) {
if (q->next->v1->vN > v1 || q->next->v2->vN > v2) {
break;
}
q = q->next;
if (q->next == NULL) {
q->next = e;
return;
}
}
e->next = q->next;
q->next = e;
}
}
void delete(Graph* G, Edge* q, int v1, int v2) {
if (q->v1->vN == v1 && q->v2->vN == v2) {
G->eHead = q->next;
}
else {
for (; q != NULL; q = q->next) {
if (q->next->v1->vN == v1) {
if (q->next->v2->vN == v2) {
break;
}
}
}
Edge* e = q->next->next;
q->next = e;
}
}
int newWeight(Graph* G, int w, int v1, int v2) {
Edge* q = G->eHead;
for (; q != NULL; q = q->next) {
if (q->v1->vN == v1) {
if (q->v2->vN == v2) {
q->weight = w;
return 0;
}
}
}
return 1;
}
void printG (Graph* G, int n) {
Edge* q = G->eHead;
for (; q != NULL; q = q->next) {
if (q->weight == 0) {
continue;
}
if (q->v2->vN == n) {
printf(" %d %d", q->v1->vN, q->weight);
}
else if (q->v1->vN == n) {
printf(" %d %d", q->v2->vN, q->weight);
}
}
printf("\n");
}
void main() {
Graph G;
init(&G);
createVertex(&G, 1); createVertex(&G, 2); createVertex(&G, 3);
createVertex(&G, 4); createVertex(&G, 5); createVertex(&G, 6);
insertEdge(&G, 1, 1, 2); insertEdge(&G, 1, 1, 3);
insertEdge(&G, 1, 1, 4); insertEdge(&G, 2, 1, 6);
insertEdge(&G, 1, 2, 3); insertEdge(&G, 4, 3, 5);
insertEdge(&G, 4, 5, 5); insertEdge(&G, 3, 5, 6);
Edge* q = G.eHead;
char type;
int n = 0;
int a = 0, b = 0, w = 0, flag = 0, tmp = 0;
while (1)
{
scanf("%c", &type);
if (type == 'a') {
scanf("%d", &n);
getchar();
if (n < 1) {
printf("-1\n");
continue;
}
if (n > 6) {
printf("-1\n");
continue;
}
printG(&G, n);
}
else if (type == 'm') {
scanf("%d %d %d", &a, &b, &w);
getchar();
if (a < 1 || b < 1) {
printf("-1\n");
continue;
}
if (a > 6 || b > 6) {
printf("-1\n");
continue;
}
if (a > b) {
tmp = a;
a = b;
b = tmp;
}
if (w == 0) {
delete(&G, q, a, b);
}
else {
flag = newWeight(&G, w, a, b);
if (flag == 1) {
newInsertEdge(&G, w, a, b);
}
}
}
else if (type == 'q') {
break;
}
q = G.eHead;
}
}
๋ฐ์ํ
'Programming > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฉํฅ๊ทธ๋ํ] ์์์์ in-degree (์ง์ ์ฐจ์) ์ด์ฉํด์ ๊ตฌํ๊ธฐ (0) | 2021.12.07 |
---|---|
[๊ทธ๋ํ์ํ] (0) | 2021.12.07 |
[ํด์ํ ์ด๋ธ] (0) | 2021.11.22 |
[ํ์ํธ๋ฆฌ] ์ด์งํ์ํธ๋ฆฌ (0) | 2021.10.20 |
[์ฌ์ ] ์ด์งํ์ ์์ฉ, ๋จ์ผ๋ชจ๋ ๋ฐฐ์ด (0) | 2021.10.20 |
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- AI์ปจํผ๋ฐ์ค
- MYSQL
- ํ๋ก๊ทธ๋๋จธ์ค
- AIRUSH2023
- C์ธ์ด
- ์ฝํ ์ค๋น
- ์คํ ์ด๋ธ๋ํจ์
- StableDiffusion
- SKTECHSUMMIT
- ์ฝํ
- dreambooth
- ์ฝ๋ฉ์๋ฌ
- SQL
- ๊ตฌ๊ธ์ฝ๋ฉ
- ํ์ด์ฌ์ฝํ
- ๋๋ฆผ๋ถ์ค
- AIRUSH
- ๊ธฐ์ ์ปจํผ๋ฐ์ค
- ์ฝ๋ฉ๊ณต๋ถ
- lgaimers
- ๋ ผ๋ฌธ์ฝ๊ธฐ
- WGAN
- ํ ํฌ์๋ฐ
- ํ์ด์ฌ
- Aimers
- CLOVAX
- DALLE
- HyperCLOVA
- gan
- ๋ ผ๋ฌธ๋ฆฌ๋ทฐ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
๊ธ ๋ณด๊ดํจ