alonsosjumper

laberinto corregido

Aug 20th, 2011
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. typedef struct
  2. {
  3. int f,c;
  4. }tCasilla;
  5. typedef tCasilla *casilla;
  6.  
  7. typedef struct
  8. {
  9. casilla a,b;
  10. }tPared;
  11. typedef tPared *pared;
  12.  
  13. boolean Adyacente(casilla a,casilla b)
  14. {
  15. if(a->f==b->f && Abs(a->c-b->c)==1 || a->c==b->c && Abs(a->f-b->f)==1)
  16. return 1;
  17. else
  18. return 0;
  19. }
  20.  
  21. Static casilla NodoCasilla(vertice v,int n)
  22. {
  23. casilla c;
  24. c=(casilla)malloc(sizeof(tCasilla));
  25. if(c==NULL)
  26. ERROR("No hay memoria");
  27. c->f=v/n;
  28. c->c=v%n;
  29. return c;
  30. }
  31.  
  32. Static vertice CasillaNodo(casilla c,int n)
  33. {
  34. return c->f*n+c->c;
  35. }
  36.  
  37. static int Abs(int a)
  38. {
  39. if(a>0)
  40. return a;
  41. else
  42. return a*(-1);
  43. }
  44.  
  45. static int Longitud(vertice orig, vertice i, vertice *P)
  46. {
  47. if (P[i] == orig)
  48. return 0;
  49. else
  50. return 1+Longitud(orig, P[i], P);
  51. }
  52.  
  53. casilla CrearCasilla(vertice a,vertice b)
  54. {
  55. casilla C;
  56. C=(casilla)malloc(sizeof(tCasilla));
  57. if(C==NULL)
  58. ERROR("CrearCasilla: No Hay memoria");
  59. C->f=a;
  60. C->c=b;
  61. return C;
  62. }
  63.  
  64. pared CrearParedes(casilla a,casilla b)
  65. {
  66. pared p;
  67. p=(pared)malloc(2*N*sizeof(tPared));
  68. if(p==NULL)
  69. ERROR("CrearPared: No Hay memoria");
  70. p->a=a
  71. p->b=b;
  72. return p;
  73. }
  74.  
  75. int Laberinto(int n,pared p,casilla E,casilla S)
  76. {
  77. int i,j,k,HayPared=0;
  78. int long_cam=0;
  79. tCoste **D;
  80. vertice **P;
  81. Grafo G;
  82. G=CrearGrafo(n*n);
  83.  
  84. for(i=0;i<n*n;i++)
  85. {
  86. for(j=0;j<n*n;j++)
  87. {
  88. for(k=0;k<2*n*n;k++)
  89. if(casillaTonodo(p->a)==i && (casillaTonodo(p->b)==j ||
  90. casillaTonodo(p->a)==j && (casillaTonodo(p->b)==i)
  91. HayPared=1;
  92. if(Adyacente(NodoCasilla(i,n),NodoCasilla(j,n))==1 && HayPared!=1)
  93. InsertarGrafo(1,i,j,G);
  94. HayPared=0;
  95. }
  96. }
  97. //Mostrar matriz de costes
  98. for(i=0;i<n*n;i++)
  99. {
  100. for(j=0;j<n*n;j++)
  101. printf("G[%d][%d]=%d\n",i,j,G->Costes[i][j]);
  102. printf("\n");
  103. }
  104.  
  105. Dijkstra(CasillaNodo(E,n),G,&D,&P);
  106. long_cam =(1+Longitud(CasillaNodo(E,n),CasillaNodo(S,n),P));
  107. Caminoi(CasillaNodo(E,n),CasillaNodo(S,n),P);
  108.  
  109. return(long_cam);
  110. }
Advertisement
Add Comment
Please, Sign In to add comment