2014-09-13 47 views

回答

0

我认为如果我们采取如以下代码中所示的另一地图“入度”,并增加计数,如果该字符显示为边缘的结束端,那么我们可以找到与入度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; 
     } 
}  
0

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

+1

我想他的意思是在度0,又名无毛边去节点,只有走出这 – programmerjake 2014-09-13 16:28:02

+0

。如果是这样的话,让我们等待细化的问题。我的发言是无稽之谈。 – Jakub 2014-09-13 16:33:39

1

创建将存储最终节点的vector<char> L

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

我们最初没有关于节点的任何信息。随着新的边缘的到来,我们将了解图的两个节点。 – user3747190 2014-09-13 16:49:47

相关问题