找到一个节点,在度为零我实现了一个图,我推入图中这样C++使用地图</p> <pre><code>map<char,vector<char> > M; </code></pre> <p>现在,我越来越边缘一一图
addEdge(char a,char b){
M[a].push_back(b);
}
我想找到度数为零的所有节点。什么才是最有效的方法呢?
找到一个节点,在度为零我实现了一个图,我推入图中这样C++使用地图</p> <pre><code>map<char,vector<char> > M; </code></pre> <p>现在,我越来越边缘一一图
addEdge(char a,char b){
M[a].push_back(b);
}
我想找到度数为零的所有节点。什么才是最有效的方法呢?
我认为如果我们采取如以下代码中所示的另一地图“入度”,并增加计数,如果该字符显示为边缘的结束端,那么我们可以找到与入度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;
}
}
您不能在由仅包含边的数据结构表示的图中使零度的节点。 因此,如果您的图形完全由M []描述,则可以保证没有零度的节点。
创建将存储最终节点的vector<char> L
。
L
中,请将其从L
中删除。我们最初没有关于节点的任何信息。随着新的边缘的到来,我们将了解图的两个节点。 – user3747190 2014-09-13 16:49:47
我想他的意思是在度0,又名无毛边去节点,只有走出这 – programmerjake 2014-09-13 16:28:02
。如果是这样的话,让我们等待细化的问题。我的发言是无稽之谈。 – Jakub 2014-09-13 16:33:39