1,146 토폴로지 주문 (25 분) (결정 토폴로지의 정렬 순서없이)

 

1146 토폴로지 주문 (25 分)

이는 2018 년 대학원 입학 시험에 주어진 문제입니다 : 다음 중 주어진 방향 그래프에서 얻은 위상 순서 아닌가요? 이제 당신은 각 옵션을 테스트하는 프로그램을 작성하기로되어있다.

gre.jpg

입력 사양 :

각 입력 파일은 하나의 테스트 케이스가 포함되어 있습니다. 각 경우에있어서, 첫 번째 행은 두 양의 정수 N (≤ 1000), 그래프의 정점의 수, M (≤ 10,000), 방향 에지의 개수를 제공한다. 그런 다음 M 라인은 각각의 시작과 끝의 마지막 정점을 제공하십시오. 정점은 K의 정수 다른 양극 (≤ 100)가 그래프 후 1 내지 N 번째된다. 그런 다음 쿼리 추적의 K 라인은 각각의 모든 정점의 순열을 제공합니다. 라인의 모든 번호는 공백으로 구분된다.

출력 사양 :

모든 라인에 "NOT 토폴로지 순서"에 해당 쿼리의 인덱스를 인쇄합니다. 인덱스는 0부터 시작합니다. 모든 숫자는 공백으로 구분하고있다가 반드시 별도의 시작 부분에 공백이나 줄의 끝. 적어도 하나 개의 해답이 있음을 graranteed된다.

샘플 입력 :

6 8
1 2
1 3
5 2
5 4
2 3
2 6
3 4
6 4
5
1 5 2 3 6 4
5 1 2 6 3 4
5 1 2 3 6 4
5 2 1 6 3 4
1 2 3 4 5 6

샘플 출력 :

3 4

효과에 제목 : 주어진 당신이 위상 정렬을 판단 할 수 있습니다 그래프 가장자리 지시하고주고 K 게놈 시퀀스의 설정, 

생각 : 도 스토리지 어레이 벡터로하면, inDegree [각 도트의 기록의 배열을 확인하는 [] 배열을 저장 순서, 언

이 0도 BREAK가 아닌 경우, 점 빼기 (1)의 각 지점의 모든 포인트를 각 루프 체크 포인트를 ARR

전체 코드 :

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<int> g[1001];
int n,m,k,arr[1001],inDegree[1001];
int main(){
    cin>>n>>m;
    int u,v,temp[1001] = {0},res[101];
    int cnt = 0;
    for(int i = 0;i<m;i++){
        scanf("%d%d",&u,&v);
        g[u].push_back(v);
        temp[v]++;
    }
    cin>>k;
    for(int i = 0;i<k;i++){
        //记得每次都要重新赋值inDegree数组
        for(int j = 1;j<=n;j++){
            inDegree[j] = temp[j];
        }
        for(int j = 1;j<=n;j++){
            scanf("%d",&arr[j]);
        }
        for(int j = 1;j<=n;j++){
            //入度不为0就不能形成拓扑排序
            if(inDegree[arr[j]]!=0){
                res[cnt++] = i;
                break;
            }
            //该点指向的所有点入度减1
            for(int u = 0;u<g[arr[j]].size();u++){
                int v = g[arr[j]][u];
                inDegree[v]--;
            }
        }
    }
    bool flag = false;
    for(int i = 0;i<cnt;i++){
        if(flag==false){
            cout<<res[i];
            flag = true;
        }
        else {
            cout<<" "<<res[i];
        }
    }
    return 0;
}

 

게시 38 개 원래 기사 · 원의 찬양 3 ·은 10000 +를 볼

추천

출처blog.csdn.net/qq_40167974/article/details/104879388