교수님이 단절선을 C로 짜오는 과제를 내주셨단 말이야?
근데 구글링 해보니깐 c++ 코드 밖에 없는겨
c로 고쳐볼라고 했는데, c++ 하나도 몰름 허미;;
혹시 여기다가 소스코드 올리고 고쳐 달라고 하면 개에바참치꽁치겠지?
으아ㅏㅏㅏㅏㅏㅏ 뒤지겄다 진짜ㅋㅋㅋㅋㅋ
누가 근데 지식인에 나랑 같은걸 물어 보더라구
그래서 답변 올라온걸 돌려봤는데 #include<stdbool.h> 가
fatal error C1083: 포함 파일을 열 수 없습니다. 'stdbool.h': No such file or directory
오류뜸ㅋㅋㅋ
아래가 코드인데 어디가 문제일까?
#include <stdio.h>
#include <stdbool.h>
#define MAXV 100010
#define MAXBUF 1000
typedef struct pair
{
int first, second;
} pair;
pair make_pair(int f, int s);
typedef struct vector
{
int size;
int buf[MAXBUF];
} vector;
void v_push_back(vector* v, int val);
int V, E, counter = 0, discovered[MAXV];
bool isCutVertex[MAXV];
vector graph[MAXV];
pair edge[MAXBUF];
int edge_size = 0;
void edge_push_back(pair p);
void edge_sort();
int min(int a, int b);
int max(int a, int b);
int dfs(int A, int parent)
{
discovered[A] = ++counter;
int ret = discovered[A];
for (int i = 0; i < graph[A].size; i++)
{
int next = graph[A].buf[i];
if (next == parent)
continue;
if (!discovered[next])
{
int low = dfs(next, A);
if (low > discovered[A])
{
edge_push_back(make_pair(min(A, next), max(A, next)));
}
ret = min(ret, low);
}
else
{
ret = min(ret, discovered[next]);
}
}
return ret;
}
int main() {
printf("정점의 수 입력 : ");
scanf_s("%d", &V);
printf("간선의 수 입력 : ");
scanf_s("%d", &E);
for (int i = 1; i <= E; i++) {
int a, b;
scanf_s("%d %d", &a, &b);
v_push_back(&graph[a], b);
v_push_back(&graph[b], a);
}
dfs(1, 0);
edge_sort();
printf("단절선 갯수는 %d 입니다.\n", edge_size);
for (int i = 0; i < edge_size; i++)
printf("%d %d\n", edge[i].first, edge[i].second);
return 0;
}
pair make_pair(int f, int s)
{
pair p;
p.first = f;
p.second = s;
return p;
}
void v_push_back(vector* v, int val)
{
v->buf[v->size] = val;
++v->size;
}
void edge_push_back(pair p)
{
edge[edge_size] = p;
++edge_size;
}
int pair_cmp(pair* a, pair* b)
{
if (a->first < b->first) return -1;
if (a->first > b->first) return 1;
if (a->second < b->second) return -1;
if (a->second > b->second) return 1;
return 0;
}
void edge_sort()
{
pair tmp;
for (int a = 0; a < edge_size - 1; ++a)
for (int b = a + 1; b < edge_size; ++b)
if (pair_cmp(&edge[a], &edge[b]) < 0)
{
tmp = edge[a];
edge[a] = edge[b];
edge[b] = tmp;
}
}
int min(int a, int b)
{
return a < b ? a : b;
}
int max(int a, int b)
{
return a > b ? a : b;
}