C ++在图中查找具有零度的节点

时间:2014-09-13 16:19:05

标签: c++ graph nodes

我已使用地图

实施了图表
map<char,vector<char> > M;

现在,我逐渐获得优势,我正在将它们推向像这样的图形

addEdge(char a,char b){
M[a].push_back(b);
}

我想找到度数为零的所有节点。什么是最有效的方法呢?

3 个答案:

答案 0 :(得分:1)

创建一个vector<char> L,它将存储最终节点。

  1. 启动它以包含所有节点。
  2. 对于每条边(a,b):如果b在L中,请将其从L中删除。

答案 1 :(得分:0)

在由仅包含边的数据结构表示的图中,不能有零度的节点。 因此,如果您的图形由M []完全描述,则保证没有零度的节点。

答案 2 :(得分:0)

我认为如果我们采取另一张地图&#39; indegree&#39;如下面的代码所示,并增加计数,如果字符显示为边的终止端,那么我们可以找到具有indegree 0的节点。

map<char,vector<char> > M;
map<char,int> indegree;     
void addEdge(char a,char b){    
        M[a].push_back(b);                  
        indegree[b]++;
}
void show(){
        for(map<char,vecotr<char> > :: iterator it=M.begin();it!=M.end();it++){
                if(indegree[it->first]==0)
                        cout<<it->first<<endl;
        }
}       

另一种方法是预定义大小为256的数组,并按照与上面相同的步骤进行操作。

map<char,vector<char> > M;
int arr[256]={0};
void addEdge(char a,char b){    
        M[a].push_back(b);                  
        arr[b]++;
}
void show(){
        for(map<char,vecotr<char> > :: iterator it=M.begin();it!=M.end();it++){
                if(arr[it->first]==0)
                        cout<<it->first<<endl;
        }
}