• AI글쓰기 2.1 업데이트
BRONZE
BRONZE 등급의 판매자 자료
non-ai
판매자가 AI를 사용하지 않은 독창적인 자료

깊이우선탐색(Depth First Search) 를 이용하여 Pre, Post 및 Strongly Connected Component 계산하기

알고리즘 코딩과제로 제출했던 것 입니다. Visual Studio 2010 에서 C++로 제작하였습니다. 대표적 자료구조인 linked list와 stack 공간을 이용하였으며, Gobow함수를 구현했습니다. 학부수준에서는 높은 퀄리티라 생각되며 공부가 많이 되실 것 입니다. -Strongly Connected Component 파일로부터 데이터를 입력받아서 그래프를 adjacency matrix의 형태로 저장한다. – 파일의 구조 • n (vertex의 개수) • Vertex list • m (edge의 개수) • Edge list (Source Destination) – 입력 파일: digraph.txt Graph.txt 파일로부터 그래프에 대한 정보를 읽어 들여서 adjacency matrix의 형태로 화면에 출력한다. • Graph를 depth-first search하면서 pre와 post를 계산해서 출력한다. • Graph로부터 strongly connected component를 계산해서 출력한다. • Strongly connected component들의 그룹으로부터 만들어진 dag에서 source와 sink를 표시한다.
압축파일
최초등록일 2011.12.21 최종저작일 2011.10
깊이우선탐색(Depth First Search) 를 이용하여 Pre, Post 및 Strongly Connected Component 계산하기
  • 미리보기

    소개

    알고리즘 코딩과제로 제출했던 것 입니다.
    Visual Studio 2010 에서 C++로 제작하였습니다.
    대표적 자료구조인 linked list와 stack 공간을 이용하였으며, Gobow함수를 구현했습니다.
    학부수준에서는 높은 퀄리티라 생각되며 공부가 많이 되실 것 입니다.

    -Strongly Connected Component

    파일로부터 데이터를 입력받아서 그래프를 adjacency matrix의 형태로 저장한다.

    – 파일의 구조
    • n (vertex의 개수)
    • Vertex list
    • m (edge의 개수)
    • Edge list (Source Destination)

    – 입력 파일: digraph.txt

    Graph.txt 파일로부터 그래프에 대한 정보를 읽어 들여서 adjacency matrix의 형태로 화면에 출력한다.

    • Graph를 depth-first search하면서 pre와 post를 계산해서 출력한다.
    • Graph로부터 strongly connected component를 계산해서 출력한다.
    • Strongly connected component들의 그룹으로부터 만들어진 dag에서 source와 sink를 표시한다.

    컴파일 실행환경

    Microsoft Visual Studio 2010

    본문내용

    #include
    #include
    #include "DAGStack.h"
    #include "LinkedList.h"
    #include "Vertex.h"
    #include "Stack.h"

    using namespace std;

    #define FILE_NAME "digraph.txt" //인풋파일이름

    /*클래스 스택노드
    클래스 스택
    클래스 버택스
    클래스 리스트노드
    클래스 링키드 리스트
    클래스 DAG 스택*/

    //주요 자료구조는 linked list 밖에 없다. 행렬, pre post, source sink 모두 리스트를 가져와서 표현
    LINKED_LIST *Adjacency_List; // 인접 리스트

    VERTEX *Digraph;

    STACK *S, *P;

    DAG_STACK *DAGs;

    int N;

    int Cnt, SCC; // PRE&POST VISIT Counter

    void Initialize(void)
    {
    int i, j, k, m;

    char v1, v2;

    // 초기화
    Digraph = NULL;//Vertex
    S = P = NULL;//STACK *S, *P;
    DAGs = NULL;//DAG stack
    Cnt = 0;
    // 파일 입력
    ifstream fin;

    // dynamic allocation
    fin.open(FILE_NAME);
    fin >> N;
    Digraph = new VERTEX[N];

    Adjacency_List = new LINKED_LIST[N];// 생성

    // vertex name insertion
    for(i = 0; i < N ;i++)
    {
    fin >> Digraph[i].V;
    }

    fin >> m; //

    //인접리스트 만드는거
    for(i = 0; i < m ;i++)
    {
    fin >> v1 >> v2;
    for(j = 0; j < N; j++)
    {
    if(Digraph[j].V == v1) break;
    }
    for(k = 0; k < N; k++)
    {
    if(Digraph[k].V == v2) break;
    }
    Adjacency_List[j].Insert(k);
    }
    fin.close();
    }

    void Adjacency_Matrix(void)
    {
    //printf("ADJ CALLn");
    int i, j; // 인접리스트의 내용을 가져와서 null이 아닐때까지 하나하나 표시 i는 세로 j는 가로
    LIST_NODE *p;
    cout Data].Pre == -1)
    {
    DFS(p->Data); //재귀호출. 초기화했던 -1인 각 노드 인 것들을 모두 DFS하여 pre를 센다.
    }
    else if(Digraph[p->Data].SCC==-1)
    {
    int j; //Strongly Connected Component -1 인 것을 각 pop
    do
    {
    j = P->Pop();
    } while(Digraph[j].Pre > Digraph[p->Data].Pre);
    P->Push(j);// pop 했던 것을 다른곳에 push
    }
    p = p->Next;
    }
    if(P->IsTop(i)) //top
    {
    int j; //SCC 변수 j = P->Pop();
    DAG_STACK *Stack_Node;//DAG = new LINKED_LIST;
    Stack_Node = new DAG_STACK;
    do
    {
    j = S->Pop(); //STACK *S, *P;
    Stack_Node->DAG->Insert(j);
    Digraph[j].SCC = SCC;
    } while(j != i);
    Stack_Node->Next = DAGs;
    DAGs = Stack_Node; //하나의 DAGs를 Stack_Node에 넣어놓고
    SCC++; // SCC 증가시키고
    j=P->Pop(); // pop
    }
    Digraph[i].Post = ++Cnt; //post counter // int Cnt, SCC; PRE&POST VISIT Counter
    }

    참고자료

    · 없음
  • 자료후기

      Ai 리뷰
      이 자료는 깊이 있는 내용과 함께 과제에 적용 가능한 내용이 많아 도움이 되었습니다. 과제에 바로 활용할 수 있어 매우 만족스러웠습니다. 감사합니다.
    • 자주묻는질문의 답변을 확인해 주세요

      해피캠퍼스 FAQ 더보기

      꼭 알아주세요

      • 자료의 정보 및 내용의 진실성에 대하여 해피캠퍼스는 보증하지 않으며, 해당 정보 및 게시물 저작권과 기타 법적 책임은 자료 등록자에게 있습니다.
        자료 및 게시물 내용의 불법적 이용, 무단 전재∙배포는 금지되어 있습니다.
        저작권침해, 명예훼손 등 분쟁 요소 발견 시 고객센터의 저작권침해 신고센터를 이용해 주시기 바랍니다.
      • 해피캠퍼스는 구매자와 판매자 모두가 만족하는 서비스가 되도록 노력하고 있으며, 아래의 4가지 자료환불 조건을 꼭 확인해주시기 바랍니다.
        파일오류 중복자료 저작권 없음 설명과 실제 내용 불일치
        파일의 다운로드가 제대로 되지 않거나 파일형식에 맞는 프로그램으로 정상 작동하지 않는 경우 다른 자료와 70% 이상 내용이 일치하는 경우 (중복임을 확인할 수 있는 근거 필요함) 인터넷의 다른 사이트, 연구기관, 학교, 서적 등의 자료를 도용한 경우 자료의 설명과 실제 자료의 내용이 일치하지 않는 경우
    문서 초안을 생성해주는 EasyAI
    안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
    저는 아래와 같이 작업을 도와드립니다.
    - 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
    - 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
    - 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
    이런 주제들을 입력해 보세요.
    - 유아에게 적합한 문학작품의 기준과 특성
    - 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
    - 작별인사 독후감
    • 전문가요청 배너
    해캠 AI 챗봇과 대화하기
    챗봇으로 간편하게 상담해보세요.
    2025년 11월 17일 월요일
    AI 챗봇
    안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
    4:31 오후