disiodj

VISITEDIGRAFI_1_SvoltiACasa_Correggi

Jan 23rd, 2016
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //ESERCIZI SU VISITE DI GRAFI PROVATI DA ME
  2.  
  3. GRAFO-CONNESSO(A){
  4. for(i=0 to A.lenght-1)
  5.     color[i] = 0;
  6. BFS(A,v, color);
  7. for(i=0 to A.lenght-1)
  8.     if(coloro[i]==0);
  9.         return FALSE
  10. return TRUE
  11. }
  12. BFS(A,i, color)
  13.     color[i] = 1
  14.     x = A[i];
  15.     while(x!=NULL)
  16.         k = x.key;
  17.         if(k==0)
  18.             BFS(A,k, color);
  19.         x = x.next;
  20.     color[i] = 2;
  21. ____________________________________________________________________________________________________________________________
  22. STESSA-COMPONENTE-FORTEMENTE-CONNESSA(A, u,v) ------------chiedi se giusta---------------
  23. for(i=0 to A.lenght-1)
  24.     color[i] =0;
  25. for(i=0 to A.lenght-1){
  26.     if(color[i]==0){
  27.         cont++;
  28.         BFS(A,k, color, cont);
  29.         }
  30. }
  31. primoGiaTrovato=FALSE;
  32. for(i=0 to color.lenght-1){
  33.     if(i=u)
  34.         Appartenente = color[i]
  35. }
  36. for(i=0 to color-lenght-1)
  37.     if(i=v && color[i] = appartenente)
  38.         return TRUE;
  39. return FALSE;
  40.  
  41. ________________________________________________________________________________________________________________________
  42. COMPONENTI-CONNESSE(A)
  43.     for(i=0 to A.lenght-1)
  44.         color[i] = 0;
  45.     cont = COMPONENTI-CONNESSE-RIC(A, v, color)
  46.     return cont;
  47.  
  48. COMPONENTI-CONNESSE-RIC(A, v, color){
  49.     for(i=0 to A.lenght-1){
  50.         if(color[i]==0){
  51.             cont++;
  52.             DFS(A, i, color);
  53.         }
  54.     }
  55. return cont;
  56. /*si può fare più semplice ovviamente, senza sta cosa ricorsiva*/
  57.  
  58. /*se volessi calcolare le componenti connesse con una certa proprietà p, ad esempio il numero delle componenti connesse che hanno tre nodi, che sono dei cicli, che sono degli alberi, o che hanno tanti nodi quanti archi. il contatore viene incrementato prima del lancio della dfs, se in fondo gli passo anche cont alla dfs, posso modificare la dfs in modo che quando visita la prima volta marca tutto con 1, la seocnda visita marca con cont con 2, poi con 3 4, dentro color non solo ho l'infomrazione dei nodi, ma anche in quale visita li ho visitati, se li ho effettuati nella prima visita, faranno parte della prima componente connesse, o della seconda.
  59.  
  60. _______________________________________________________________________________________________________
  61.  
  62. GRAFO-CONNESSO-CONPROPRIETA'(A)
  63. for(i=0 to A.lenght-1){
  64.     color[i] =0;
  65. // cont è una nuova variabile
  66. for(i=0 to A.lenght-1)
  67.     if(color[i]==0){
  68.         cont++;
  69.         DFS(A, i, color, cont)
  70.     }
  71. }
  72.  
  73. /*Stampo il numero medio di nodi di ogni componente connessa*/
  74. // C è un array di dimensione cont
  75. for i=0 to cont{
  76.     for(i=0 to color.lenght-1){
  77.         if(color[i] == cont)
  78.             cont2++;
  79.     }
  80.     if(cont2==10)
  81.         return TRUE;
  82. }
  83.  
  84. DFS(A, v, color, cont)
  85.     color[i] = cont;
  86.     x = A[i]
  87.     while(x!=NULL)
  88.         k = x.info;
  89.         if(color[k]==0)
  90.             DFS(A, k, color, cont)
  91.        
  92.     }
  93. }
  94.  
  95. _________________________________________________________________________________________________
  96. ALBERO-RICOPRENTE(A, u)
  97.     for(i=0 to A.lenght-1){
  98.         color[i]=0;
  99.         parent[i] = -1
  100.     }
  101.     DFS(A, u, color, u, parent)  //u è un qualsiasi indice di partenza
  102.     return parent;
  103. }
  104.  
  105. DFS(A, v, color, u, parent) //v è la nuovo indice del nodo, u è l'indice del nodo da cui provengo.
  106.     parent[v] = u;
  107.     color[v] = 1;
  108.     x = A[v];
  109.     while(x!=NULL)
  110.         k = x.info;
  111.         if(color[k] ==0)
  112.             DFS(A, k, color, v, parent);
  113.         x = x.next;
  114.     color[v] = 2;
  115.  
  116. VARIANTE
  117. //confronta il campo info di u con quello di k, se k è maggiore sistema il nodo a sinistra dell'albero, se ora setto l'albero con questo nuovo nodo, ed entro nella bfs con questo nodo.
  118.  
  119. ALBERO-RICOPRENTE-CON-ALBERO(A,u){-----------------------E' tutto sbagliato-------------------
  120.     for(i=0 to A.lengh-1)
  121.         color[i] = 0;
  122.     ADD-NODO(T, A[u].info)
  123.     BFS(A, u, color, T)
  124. }
  125.  
  126. BFS-ALBERO(A, u, color, T){
  127.     color[u] = 1
  128.     x = A[u]
  129.     while(x!=NULL)
  130.         k = x.info;
  131.         if(k==0){
  132.             if(k>u){
  133.                 ADD-Nodo(T.sx, k, u);
  134.                 BFS-ALBERO(A, k, color, T.sx);
  135.             }
  136.             else{
  137.                 ADD-NODO(T.dx, k, u);
  138.                 BFS-ALBERO(A, k, color, T.dx)
  139.             }
  140. }
  141.  
  142. ADD-NODO(T, k, parent){
  143.     //x è un nuovo nodo.
  144.     x.left = NULL;
  145.     x.right=NULL;
  146.     x.info = k;
  147.     T = x;
  148. }
  149.  
  150. ___________________________________________________________________________________________________________________
  151.  
  152. DFS(A,v)
  153. for(i=0 to A.lenght-1)
  154.     color[i]=0;
  155. //Ordine è un nuovo array di dimensione A.lenght ------------------qui dovrei inizializzare l'array a valori -1
  156. DFS-ORDINE(A, u, color, ordine, 0)
  157. return ordine;
  158.  
  159. DFS-ORDINE(A, u, color, ordine, c)
  160.     ordine[u] = c;
  161.     color[i]=1;
  162.     x = A[u];
  163.     while(x!=NULL) 
  164.         k = x.key;
  165.         if(k==0)
  166.             DFS(A, k, color, ordine, c+1);
  167.         x = x.next;
  168.     color[u] = 2;
Add Comment
Please, Sign In to add comment