예전 에 별 방식 으로 그림 에 기본 적 인 정 보 를 저장 했다.

전방 향 성: 데이터 구조 로 저장 변 타 방식 으로 그림 을 저장 합 니 다.구조 방법 은 각 변 의 정 보 를 읽 고 배열 에 저장 하 며 배열 의 변 을 출발점 순서에 따라 정렬 하고 앞 에 별 을 향 해 구 조 를 완성 합 니 다.보통 점 의 수가 너무 많 거나 두 점 사이 에 여러 개의 호가 있 을 때 사용한다.일반적으로 다른 데이터 구조 가 사용 할 수 없 을 때 만 전방 향 성 을 고려한다.출발점 종점 으로 직접 위 치 를 정할 수 없 는 것 외 에 전방 향 성 은 거의 완벽 하 다.
      "· 퀘 스 트 ·"
      예전 에 별 방식 으로 그림 에 기본 적 인 정 보 를 저장 했다.
      "· 설 명 ·"
      링크 방식 으로 그림 의 가장 자 리 를 저장 합 니 다.info [i] 는 노드 i 의 사 이 드 집합 에 대응 하 는 링크 의 헤드 포인터 이 고 next [j] 는 제 j 조 변 의 다음 변 을 가리 키 는 지침 이 며 to [j] 는 제 j 조 변 이 가리 키 는 노드 번 호 를 표시 합 니 다.즉, addr = info [i] 를 사용 한 후에 addr = next [addr] 를 계속 사용 하면 링크 에 있 는 노드 i 의 모든 사 이 드 집합 번 호 를 얻 을 수 있 습 니 다. 그 중에서 to [addr] 는 대응 하 는 사 이 드 가 가리 키 는 노드 번 호 를 표시 합 니 다.
      "· 인 터 페 이 스 ·"
      구조 체: graph
      구성원 변수:
               vector < int > info      이 점 에서 출발 한 모든 변 으로 링크 를 구성한다.
               vector < int > next     링크 의 다음 변 은 to 배열 의 위치 에 있 습 니 다.
               vector < int > to         to [i] 번 호 를 나타 내 는 i 의 측면 은 노드 를 가리킨다.
      "· 코드 ·"
struct graph
{
    typedef vector<int> VI;
    VI info,next,to;
    graph (int n=0,int m=0) : to(0),next(0)
    {
        info.resize(n);
        next.reserve(m);
        to.reserve(m);
    }
    int edge_size()
    {
        return to.size();//      
    }
    int vertex_size()
    {
        return info.size();//          +1
    }
    void expand(int i)
    {
        if (info.size()<i+1)
            info.resize(i+1);
    }
    void add(int i,int j)//    i j  
    {
        expand(i),expand(j);
        to.push_back(j);
        next.push_back(info[i]);
        info[i]=to.size()-1;
    }
    void del_back()//          
    {
        int i;
        for (i=0;i<info.size();i++)
        {
            if (info[i]==to.size()-1)
            {
                info[i]=next.back();
                break;
            }
        }
        to.pop_back();
        next.pop_back();
    }
    void clear()//    
    {
        info.clear();
        next.resize(0);
        to.resize(0);
    }
};

좋은 웹페이지 즐겨찾기