게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[C언어] 형들 c++ 코드를 c로 고치는거 넘모넘모 어렵다...
게시물ID : programmer_21906짧은주소 복사하기
작성자 : Moondada
추천 : 0
조회수 : 1427회
댓글수 : 2개
등록시간 : 2017/12/23 13:32:11
옵션
  • 창작글
  • 외부펌금지


교수님이 단절선을 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;
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호