InsertVertex(GraphType *g,int v)

{

    if((g->n)+1 > MAX_VERTEX)

    {

        printf("정점 갯수 초과");

        exit(-1);

    }

    g->n++;

}




int main()

{

    GraphType *g;

    InitGraph(g);

     InsertVertex(g,1);

     InsertVertex(g,1);

     InsertVertex(g,1);

     InsertVertex(g,1);

     InsertVertex(g,1);

     InsertVertex(g,1);

     InsertVertex(g,1);

     InsertVertex(g,1);

     InsertVertex(g,1);  // 지금까지 InsertVertex 총 9번 실행됨

     InsertVertex(g,2);  //  지금까지 InsertVertex 총 10번 실행됨. 이제 g->n은 MAX_VERTEX에 도달해서 한 번 더 실행하면 에러냄

InsertEdge(g,1,2);




구조체 정의랑 여러가지 상수 설정은 싹다 갖다버림!

위에서 MAX_VERTEX 는 10이라고 했을 때

현재까지 g->n은 MAX_VERTEX인 10에 이미 도달함 --- 왜냐면 총 9 번의 InsertVertex(g,1) 이 실행되어서 g->n++가 9번 실행되었기 때문임!

그럼 여기서 main 함수에 InsertVertex(g,3) 이라고 다시 입력하고 실행하면 InsertVertex() 정의에 따라 exit됨. 근데 이건 그래프 ADT에 위배되는 일이잖아. 왜냐면 1이라는 정점을 100번 만들어내든 1천번 만들어내든 결국 Vertex 1이라는 하나의 정점밖에 안 만들어진 건데

위에서 설정한 InsertVertex()의 정의에 따르면 단순히 InsertVertex(g,1)를 반복실행해도 g->n의 카운트가 올라감

이 문제를 피하려면 내 생각엔 함수 외부에서 InsertVertex(g,int v) 의 모든 입력된 서로 다른 v값들을 요소로 하는 int Vertex_name[] 을 따로 하나 만들어주고, 새로운 v를 입력 받았을 때 이 v값과 int Vertex_name[] 내부의 모든 요소와 비교한 다음 같은 값이 있으면 printf "정점 %d는 이미 있는 정점 이름입니다. 다른 이름으로 다시 입력해주세요", &v  이런 식으로 처리해주고 return처리해야지만 내가 든 예제같은 상황이 발생 안 할 것 같은데 왜 안 그러냐는 거지..ㅠ


어떤 한심한 아이디어가 위의 예에서 발휘된건지 알려줄 프형 구함니다ㅠㅠ





번외질문) 스크린샷 같은 Building Message는 왜 발생한거야?ㅠㅠ