2015-04-09 3 views
0

Supposons que nous ayons besoin de tracer un graphique avec beaucoup de points. Par exemple INPUT: {1 # 2,2 # 3,3 # 11,1 # 11,4 # 11,4 # 5,5 # 6,4 # 12} SORTIE: 7Comment connaître le nombre maximal de nœuds connectés dans un graphique sans revenir au nœud précédent

Un noeud peut être connecté à beaucoup d'autres nœuds directement. Nous devons trouver les nœuds max connectés dans ce graphique mais pas autorisés à revenir en arrière.

J'ai essayé beaucoup d'obtenir n'importe quel algorithme pour résoudre ce problème mais pas capable de trouver. Quelqu'un peut-il m'aider s'il vous plaît pour cela?

Merci à l'avance, Krishan

+0

Que voulez-vous dire par numéro « max »? Vous devez clarifier ce qu'est exactement l'entrée et la sortie. Avez-vous une liste de bord? Un nombre de nœuds? – VoidStar

+0

Nous devons trouver la longueur maximale possible qui a traversé dans le graphique conçu par le point d'entrée donné. Par exemple INPUT {1 # 2,2 # 3,3 # 11,1 # 11,4 # 11,4 # 5,5 # 6,4 # 12} devrait sortir 7 comme résultat –

Répondre

0

Votre définition du problème est encore un peu vague - au moins de mon point de vue. Cependant, je pense que vous cherchez le plus long chemin dans un graphe (dirigé ou non?). En général, il s'agit d'un problème NP-complet. Jetez un oeil à this wikepedia entry. Cela devrait servir de point de départ pour d'autres recherches.

+0

Merci pour votre aide. Oui je pense, cela devrait être NP Complete. Mais, Y a-t-il du code C# ou un pseudo-code pour trouver le chemin NP Complete dans un tableau 2D ou List etc? –

+0

Votre graphique est-il dirigé ou non-dirigé? Peut-il contenir un cycle ou est-ce un graphique acyclique? – Reinhard

+0

Il s'agit d'un graphique non orienté pouvant contenir un cycle. Mais la seule condition est, vous ne pouvez pas revenir au nœud précédent. –

0

Voici le code python qui trouvera le nombre de composants maximum (maximum de nœuds connectés) dans un graphique. Cependant, il n'est pas une solution optimale (a.k.a, lent), mais pourrait être utile pour vous de commencer

#!/bin/python 
max_count = 0 

def count_components(adj_list,r,c,count): 
    global max_count 
    row = adj_list[r] 

    #count 
    connections = 0 
    for j in range(len(row)): 
     if row[j]==1: 
      connections+=1 
    count+=connections 

    #traverse 
    for j in range(len(row)): 
     if row[j]==1:    
      adj_list[j][r]=0 
      count_components(adj_list,j,r,count) 
    #print 'count = {}'.format(count) 
    if count>max_count: 
     max_count = count 

def get_max_num_of_connected_component(adj_list): 

    for i in range(len(adj_list)): 
     row = adj_list[i] 
     for j in range(len(row)): 
      if row[j]==1: 
       count_components(adj_list,i,j,1) 
       break 

     #print_adjecency_list(adj_list) 
    #print 'max_count = {}'.format(max_count) 
    return max_count 
def print_adjecency_list(adj_list): 
    for i in range(len(adj_list)): 
     row = adj_list[i] 
     for j in range(len(row)): 
      print row[j], 
     print 
    print 
import sys 

n, m = raw_input().strip().split(' ') 
n, m = [int(n), int(m)] 
route = [] 
for route_i in xrange(m): 
    route_temp = map(int,raw_input().strip().split(' ')) 
    route.append(route_temp) 
# Write Your Code Here 

# generate NxM adjecency list of 
adjecency_list=[] 
for i in range(n): 
    row = [] 
    for j in range(n): 
     row.append(0) 
    adjecency_list.append(row) 

for road in route: 
    r = road[0]-1 
    c = road[1]-1 
    adjecency_row = adjecency_list[r] 
    adjecency_row[c]=1 
    adjecency_list[r] = adjecency_row 

    r = road[1]-1 
    c = road[0]-1 
    adjecency_row = adjecency_list[r] 
    adjecency_row[c]=1 
    adjecency_list[r] = adjecency_row 

#print_adjecency_list(adjecency_list) 

print get_max_num_of_connected_component(adjecency_list)