Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. /*Neste programa você vai trabalhar com a Busca em Largura (BFS) em um grafo
  2. simples, usando a representação de matriz de adjacências.
  3. 1. A idéia é determinar a matriz de distâncias mínimas DM entre todos
  4. os vértices do grafo e com isso determinar o centro do grafo. O centro do grafo
  5. é um conjunto de vértices que têm a distância máxima a eles mínima.
  6. 2. Modifique o programa para determinar toda a matriz de distâncias mínimas
  7. e determinar o centro do grafo.
  8. */
  9. #include<iostream>
  10. #include <string.h>
  11. using namespace std;
  12. const int NVM=1001;
  13. typedef struct no{int v; int d;};
  14.  
  15. // Declarações para o grafo
  16. int n, m, cpre, pre[NVM], E[NVM][NVM], DM[NVM][NVM];
  17.  
  18. //Outras declarações
  19. int i, j, u, w, f, r;
  20. no Q[NVM];
  21.  
  22. void Inicializa(int n){
  23. memset(E, 0, sizeof(E));
  24. memset(DM, 0, sizeof(DM));
  25. memset(pre, 0, sizeof(pre));
  26. f = r = cpre = 0;
  27. }
  28. void BL(int u, int v){
  29. no t;
  30. pre[v] = ++cpre; r = 1; f = 1; Q[1].v = v; Q[1].d = 0;
  31. while(f != 0){
  32. t = Q[f];
  33. for(int w=1; w<=n; w++)
  34. if( (E[w][t.v] == 1) && (pre[w] == 0)){
  35. r++; Q[r].v = w; Q[r].d = t.d+1; pre[w] = ++cpre;
  36. DM[v][w] = t.d+1;
  37. }
  38. if(f == r) f = 0;
  39. else f++;
  40. }
  41. }
  42.  
  43. int main(){
  44. cout<<endl<<"n m = ";
  45. while (cin >> n >> m){
  46. //cout<<endl<<"n m = "; cin >> n >> m;
  47. Inicializa(n);
  48. cout<<"Arestas:"<<endl;
  49. for(i=1; i<=m; i++){
  50. cin >>u>>w;
  51. E[u][w] = E[w][u] = 1;
  52. }
  53. for(i=1; i<=n; i++){
  54. for (int j=1;j<=n;j++)
  55. pre[j] = 0;
  56. BL(i,i);
  57. }
  58. int maxLocal;
  59. int minGlobal = 999;
  60. int verticeCentro;
  61. for (int k=1; k<=n; k++){
  62. cout << "Distancias para o vertice: "<< k << endl;
  63. maxLocal = 0;
  64. for(i=1; i<=n; i++){
  65. cout<<DM[k][i]<<" ";
  66. if (maxLocal < DM[k][i]){
  67. maxLocal = DM[k][i];
  68. }
  69. }
  70. cout << endl;
  71. cout << "Distancia máxima de " << k << ": " << maxLocal << endl;
  72. if (maxLocal < minGlobal){
  73. minGlobal = maxLocal;
  74. verticeCentro = k;
  75. }
  76. }
  77. cout << "Vértice centro: " << verticeCentro << endl;
  78. }
  79. return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement