uva 200拓扑排序

来源:互联网 发布:php zip 解压一个文件 编辑:程序博客网 时间:2024/05/22 04:56


//

//  main.cpp

//  ceshi

//

//  Created by 戴之阳 on 2016/11/.

//  Copyright © 2016 sky.dai. All rights reserved.

//


//

//  main.cpp

//  ceshi

//

//  Created by 戴之阳 on 2016/11/14.

//  Copyright © 2016 sky.dai. All rights reserved.

//  拓扑排序

//  基于dfskahn

/*DFS

L ← Empty list that will contain the sorted nodes

S ← Set of all nodes with no outgoing edges

     for each node n in S 

    do

       visit(n)

 

 

function visit(node n)

      if n has not been visited yet then

          mark n as visited

     for each node m with an edge from m to n

        do

           visit(m)

        add n to L*/

#include <iostream>

#include <vector>

#include <map>

#include <algorithm>

#include <cstdlib>

#include <cmath>

#include <list>

#include <stack>

#include <cstring>

#include <cstdio>

using namespacestd;


int visited[30];

int have_degreeout[30]; //have_degreeIn[i]=1表示未有入度,2代表有入度

vector<char>node_sort;

vector<char>::iterator iter;



vector<char>indegree[30]; //outgoing



//初始化

void initial()

{

    memset(visited,false,sizeof(visited));

    memset(have_degreeout,0,sizeof(have_degreeout));

    node_sort.clear();

}


void dfs(char ch)

{

    if(visited[ch-'A']==true)

        return;

    visited[ch-'A']=true;

    for(int i=0;i<indegree[ch-'A'].size();i++)

    {

        dfs(indegree[ch-'A'][i]);

    }

    node_sort.push_back(ch);

    

}


int main()

{

    int i,j;

    initial();

    string str1,str2;

    cin>>str1;

    while(cin>>str2 && str2!="#")

    {

        int len ;

        if(str1.size()>str2.size())

            len = str2.size();

        else len = str1.size();

        for(i=0;i<len;i++)

        {

            if(have_degreeout[str1[i]-'A']==0)

                have_degreeout[str1[i]-'A']=1;

            if(have_degreeout[str2[i]-'A']==0)

                have_degreeout[str2[i]-'A']=1;

            if(str2[i]!=str1[i])

            {

                have_degreeout[str1[i]-'A'] =2;//有出度

                indegree[str2[i]-'A'].push_back(str1[i]);

                break;

            }

        }

        str1 = str2;

    }

    //得到哪些点有入度并存储进vector

    for(char ch ='A';ch<='Z';ch++)

    {

        if(have_degreeout[ch-'A']==1)

            dfs(ch);

    }

    //

    for(iter=node_sort.begin();iter!=node_sort.end();iter++)

        printf("%c",*iter);

    printf("\n");

    return0;

}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 富贵竹叶子变黄了怎么办 富贵竹叶子变黄怎么办 富贵竹的叶子黄了怎么办 土栽富贵竹发黄怎么办 富贵竹的黄叶子怎么办 土培富贵竹发黄怎么办 富贵竹根变黄了怎么办 富贵竹叶子尖发黄怎么办 富贵竹新叶子发黄怎么办 富贵竹杆变黄了怎么办 水培观音竹叶子发黄怎么办 富贵竹叶子根部发黄怎么办 观音竹叶子干了怎么办 富贵竹叶子发干怎么办 观音竹老叶发黄怎么办 发财树缺营养怎么办 富贵竹根部长芽怎么办 门口的竹子发黄怎么办 富贵竹长根了怎么办 水养竹子太长怎么办 海棠根腐烂了怎么办 水竹根腐烂了怎么办 水培富贵竹黑根怎么办 转运竹根部发黑怎么办 富贵竹跟泡烂怎么办 富贵竹根烂了怎么办 富贵竹的须变黑怎么办 泡富贵竹水发臭怎么办 富贵竹水变黑了怎么办 水观音叶子黄了怎么办 富贵竹根部腐烂发臭怎么办 富贵竹根部发粘怎么办 水竹草叶子发黄怎么办 水竹叶子心发黄怎么办 塔竹叶子发黄怎么办 铁树叶有发黄怎么办 铁树夏天叶发黄怎么办 铁树的叶尖发黄怎么办 铁树叶子发黄是怎么办 榕树盆景长蜜怎么办 六月雪叶子枯萎了怎么办