Advertisement
darkjessy94

sottografo matrici adiac orientato - vincenzo

Dec 12th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. typedef struct grafo
  6. {
  7. char *vertici;
  8. int *adj_M;
  9. int size_grafo;
  10. }T_Grafo;
  11.  
  12. T_Grafo* sottografo(T_Grafo *x,char* sottoins,int size);
  13. int ric_seq(char *arr,int size,char key);
  14.  
  15. int main()
  16. {
  17. T_Grafo *x,*y;
  18. int size=5,i,j,f=1,tmp_i,tmp_j,size_sottins=0;
  19. char key;
  20. char* sottoins;
  21.  
  22. y=(T_Grafo*)malloc(sizeof(T_Grafo));
  23. y->vertici=malloc(size*sizeof(char*));
  24.  
  25. sottoins=(char*)malloc(sizeof(char*));
  26. x=(T_Grafo*)malloc(sizeof(T_Grafo));
  27. x->vertici=malloc(size*sizeof(char*));
  28. x->size_grafo=size;
  29.  
  30. printf("Carica i tuoi vertici: ");
  31. for(i=0;i<x->size_grafo;i++)
  32. {
  33. fflush(stdin);
  34. scanf("%c",&(*(x->vertici+i)));
  35. }
  36.  
  37. x->adj_M=(int*)calloc(size*size,sizeof(int*));
  38.  
  39. printf("\n\n");
  40.  
  41. while(f!=0){
  42. printf("Inserisci archi al grafo ");
  43. printf("\n\n");
  44. for(i=0;i<size;i++)
  45.  
  46. {
  47. printf("%c ",(*(x->vertici+i)));
  48. }
  49. printf("\nInserisci Da: "); fflush(stdin); scanf("%c",&key);
  50. tmp_i=ric_seq(x->vertici,size,key);
  51. printf("\nInserisci a: "); fflush(stdin); scanf("%c",&key);
  52. tmp_j=ric_seq(x->vertici,size,key);
  53. *(x->adj_M+tmp_j*size+tmp_i)=1;
  54. *(x->adj_M+tmp_i*size+tmp_j)=1;
  55. printf("\n\nper uscire scrivi 0: ");
  56. scanf("%d",&f);
  57. }
  58. for(i=0;i<size;i++)
  59. { printf("\n");
  60. for(j=0;j<size;j++)
  61. {
  62. printf("%d",(*(x->adj_M+size*j+i)));
  63. }
  64. }
  65.  
  66. printf("\n\nInserisci il vertice iniziale del sottoinsieme: ");
  67. fflush(stdin);
  68. scanf("%c",&key);
  69. tmp_i=ric_seq(x->vertici,size,key);
  70. printf("\nInserisci il size del sottoinsieme: ");
  71. scanf("%d",&size_sottins);
  72. while(size_sottins>=(size-tmp_i))
  73. {
  74. printf("errore, inserisci un size <%d",size-tmp_i);
  75. scanf("%d",&size_sottins);
  76. }
  77. printf("\nl'indice e': %d\n",tmp_i);
  78. for(i=0;i<size_sottins;i++)
  79. {
  80. *(sottoins+i)=*(x->vertici+i+tmp_i);
  81. }
  82.  
  83. printf("\nIl sottoinsieme e': ");
  84. for(i=0;i<size_sottins;i++)
  85. printf("%c ",*(sottoins+i));
  86.  
  87.  
  88. y=sottografo(x,sottoins,size_sottins);
  89.  
  90. printf("\n\nIl sottografo y e': \n\n");
  91. for(i=0;i<size_sottins;i++)
  92. { printf("\n");
  93. for(j=0;j<size_sottins;j++)
  94. {
  95. printf("%d",(*(y->adj_M+size_sottins*j+i)));
  96. }
  97. }
  98.  
  99. return 0;
  100. }
  101.  
  102. T_Grafo* sottografo(T_Grafo *x,char* sottoins,int size)
  103. {
  104. int i,j,tmp_i,tmp_i2;
  105. T_Grafo *y;
  106.  
  107. y=(T_Grafo*)malloc(sizeof(T_Grafo));
  108. y->vertici=malloc(size*sizeof(char*));
  109. y->size_grafo=size;
  110. for(i=0;i<size;i++)
  111. {
  112. *(y->vertici+i)=*(sottoins+i);
  113. }
  114. y->adj_M=(int*)calloc(size*size,sizeof(int));
  115.  
  116. for(i=0;i<size;i++)
  117. { printf("\n");
  118. for(j=0;j<size;j++)
  119. {
  120. printf("%d",(*(y->adj_M+size*j+i)));
  121. }
  122. }
  123. printf("\n");
  124. for(i=0;i<size;i++)
  125. {
  126. tmp_i=ric_seq(x->vertici,x->size_grafo,*(sottoins+i));
  127. for(j=0;j<(x->size_grafo);j++)
  128. {
  129. if(*(x->adj_M+(x->size_grafo*j)+tmp_i)==1)
  130. {
  131. tmp_i2=ric_seq(sottoins,size,*(x->vertici+j));
  132. if(tmp_i2!=-1)
  133. *(y->adj_M+size*i+tmp_i2)=1;
  134. }
  135. }
  136. }
  137.  
  138. return y;
  139. }
  140.  
  141. int ric_seq(char *arr,int size,char key)
  142. {
  143. int i;
  144. for(i=0;i<size;i++)
  145. if(*(arr+i)==key)
  146. return i;
  147.  
  148. return -1;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement