Advertisement
Guest User

Untitled

a guest
Oct 21st, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <time.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. using namespace std;
  6. void print(int *a, int n)
  7. {
  8. int i=0;
  9. while(i<n){
  10. cout<<a[i]<<",";
  11. i++;
  12. }
  13. }
  14.  
  15. void swap(int i,int j, int *a){
  16. int temp = a[i];
  17. a[i] = a[j];
  18. a[j] = temp;
  19. }
  20.  
  21. void QuickSortPivotPrimeiroOuSegundo(int *arr, int left, int right){
  22. cout<<"QS:"<<left<<","<<right<<"\n";
  23. int i = left;
  24. int j = right;
  25. int pivot;
  26. if(arr[left]> arr[left+1])
  27. pivot = arr[left];
  28. else
  29. pivot = arr[left+1];
  30. while(left<j || i<right)
  31. {
  32. while(arr[i]<pivot)
  33. i++;
  34. while(arr[j]>pivot)
  35. j--;
  36. if(i<=j){
  37. swap(i,j,arr);
  38. i++;
  39. j--;
  40. }
  41. else{
  42. if(left<j)
  43. QuickSortPivotPrimeiroOuSegundo(arr, left, j);
  44. if(i<right)
  45. QuickSortPivotPrimeiroOuSegundo(arr,i,right);
  46. return;
  47. }
  48. }
  49. }
  50.  
  51. void QuickSortPivotPrimeiroOuMeio(int *arr, int left, int right){
  52. int min = (left+right)/2;
  53. //cout<<"QS:"<<left<<","<<right<<"\n";
  54. int i = left;
  55. int j = right;
  56. int pivot;
  57. if(arr[left]> arr[min])
  58. pivot = arr[left];
  59. else
  60. pivot = arr[min];
  61. while(left<j || i<right)
  62. {
  63. while(arr[i]<pivot)
  64. i++;
  65. while(arr[j]>pivot)
  66. j--;
  67. if(i<=j){
  68. swap(i,j,arr);
  69. i++;
  70. j--;
  71. }
  72. else{
  73. if(left<j)
  74. QuickSortPivotPrimeiroOuMeio(arr, left, j);
  75. if(i<right)
  76. QuickSortPivotPrimeiroOuMeio(arr,i,right);
  77. return;
  78. }
  79. }
  80. }
  81. void QuickSortPivotAleatorio(int *arr, int left, int right){
  82. cout<<"QS:"<<left<<","<<right<<"\n";
  83. srand( (unsigned)time(NULL) );
  84. int x = rand()%right;
  85. int y = rand()%right;
  86.  
  87. int i = left;
  88. int j = right;
  89. int pivot;
  90. if(arr[x]> arr[y])
  91. pivot = arr[x];
  92. else
  93. pivot = arr[y];
  94. while(left<j || i<right)
  95. {
  96. while(arr[i]<pivot)
  97. i++;
  98. while(arr[j]>pivot)
  99. j--;
  100. if(i<=j){
  101. swap(i,j,arr);
  102. i++;
  103. j--;
  104. }
  105. else{
  106. if(left<j)
  107. QuickSortPivotAleatorio(arr, left, j);
  108. if(i<right)
  109. QuickSortPivotAleatorio(arr,i,right);
  110. return;
  111. }
  112. }
  113. }
  114. int main() {
  115. while((representacao != 1) && (representacao != 2) && (representacao != 3) && (representacao != 4) && (representacao != 5) && (representacao != 6) && (representacao != 7) && (representacao != 8) && (representacao != 9) && (representacao != 10) && (representacao != 11) && (representacao != 12) && (representacao != 13) && (representacao != 10) && (representacao != 11) && (representacao != 12) && (representacao != 13) && (representacao != 14) && (representacao != 15) && (representacao != 16)){
  116. printf(" ----------------------------------------------------------\n");
  117. printf(" Escolha o metodo de representacao: \n\n");
  118. printf(" 1 - HeapSort\n");
  119. printf(" 2 - Grau de um no\n");
  120. printf(" 3 - Grau de G\n");
  121. printf(" 4 - Dado dois vertices, dizer se sao adjacentes\n");
  122. printf(" 5 - Listar os adjacentes de um no\n");
  123. printf(" 6 - Dado um conjunto x de vertice, retornar o grafo induzido por x\n");
  124. printf(" 7 - Verificar se G eh k-regular\n");
  125. printf(" 8 - Retornar o grafo complementar de G\n");
  126. printf(" 9 - Verificar se G eh compelto\n");
  127. printf(" 10- Verificar se G eh conexo\n");
  128. printf(" 11- Verificar se um dado vertice eh de articulacao\n ");
  129. printf(" 12- Verificar se uma dada aresta eh ponte \n");
  130. printf(" 13- Algoritmo Guloso\n");
  131. printf(" 14- Algoritmo Construtivo com Fator de Aleatoridade\n");
  132. printf(" 15- Algoritmo Reativo\n");
  133. printf(" 16- Sair\n");
  134. printf(" ----------------------------------------------------------\n");
  135. printf("\t\t\t");
  136. scanf("%d",&representacao);
  137. }
  138. time_t inicio, fim;
  139. switch(representacao)
  140. {
  141. case 1:
  142.  
  143. ImprimeListaCompleta(lista,txt2);
  144.  
  145. break;
  146. case 2:
  147. do{
  148. printf("\n Digite o no que se deseja saber o grau\n");
  149. scanf("%d",&aux);
  150. }while(aux<1 || aux>nos);
  151. printf("Grau do no: %d", GrauNoLista(lista,aux));
  152. fprintf(txt2,"Grau do no %d eh: %d\n",aux, GrauNoLista(lista,aux));
  153. break;
  154. case 3:
  155. printf("O grau do grafo eh: %d",GrauGrafo(lista));
  156. fprintf(txt2,"O grau do grafo eh: %d\n",GrauGrafo(lista));
  157. break;
  158. case 4:
  159. do{
  160. printf("\n Digite os nos que se deseja saber se sao adjacentes\n");
  161. scanf("%d %d",&aux,&aux2);
  162. }while(aux<1 || aux>nos || aux2<1 || aux2>nos);
  163. if(VerficarDoisNosAdjacentes(lista,aux,aux2)){
  164. printf("Os nos %d e %d sao adjacentes",aux,aux2);
  165. fprintf(txt2,"Os nos %d e %d sao adjacentes",aux,aux2);
  166. }
  167. else{
  168. printf("Os nos %d e %d nao sao adjacentes",aux,aux2);
  169. fprintf(txt2,"Os nos %d e %d nao sao adjacentes",aux,aux2);
  170.  
  171. }
  172.  
  173. break;
  174. case 5:
  175. do{
  176. printf("\n Digite o no que se deseja os nรณ adjacentes\n");
  177. scanf("%d",&aux);
  178. }while(aux<1 || aux>nos);
  179. printf("Os nos adjacentese de %d sao: ",aux);
  180. ImprimeAdjacentesNo(lista,aux,txt2);
  181. break;
  182.  
  183. case 6:
  184.  
  185. do{
  186. do{
  187. printf("Digite os nos para encontrar o grafo induzido. Digite 0 para parar a leitura\n");
  188. scanf("%d",&aux);
  189. if(aux == 0)
  190. break;
  191. }while(aux<1 || aux>nos);
  192. vet2[k] = aux;
  193. k++;
  194. }while(aux != 0);
  195. No* induzido = RetornaInduzido(lista,vet2,k,nos);
  196. ImprimeListaCompleta(induzido,txt2);
  197. break;
  198. case 7:
  199. KRegular(lista,txt2);
  200. break;
  201. case 8:
  202. complementar = GrafoComplementar(lista,nos);
  203. printf("Grafo complementar:\n");
  204. fprintf(txt2,"\nGrafo complementar:\n");
  205. ImprimeListaCompleta(complementar,txt2);
  206. break;
  207. case 9:
  208. VerificarGCompleto(lista,nos,txt2);
  209. break;
  210. case 10:
  211. if(VerificaConexo(nos,lista)){
  212. printf("O grafo eh Conexo");
  213. fprintf(txt2,"\nO grafo eh Conexo");
  214. }
  215. else{
  216. printf("O grafo nao eh Conexo");
  217. fprintf(txt2,"\nO grafo nao eh Conexo");
  218. }
  219. break;
  220. case 11:
  221. do{
  222. printf("\n Digite o no que se deseja saber se eh de articulacao\n");
  223. scanf("%d",&aux);
  224. }while(aux<1 || aux>nos);
  225. if(VerificaVerticeArticulacao(aux,lista,nos)){
  226. printf("O no eh de articulacao");
  227. fprintf(txt2,"\nO no eh de articulacao");
  228. }
  229. else{
  230. printf("O no nao eh de articulacao");
  231. fprintf(txt2,"\nO no nao eh de articulacao");
  232. }
  233. break;
  234. case 12:
  235. do{
  236. printf("\n Digite os nos que se deseja saber se eh ponte\n");
  237. scanf("%d %d",&aux,&aux2);
  238. }while(aux<1 || aux>nos || aux2<1 || aux2>nos);
  239.  
  240. if(VerificaArestaPonte(aux,aux2,lista,nos)){
  241. printf("A aresta eh ponte");
  242. fprintf(txt2,"\nA aresta eh ponte");
  243. }
  244. else{
  245. printf("A aresta nao eh ponte");
  246. fprintf(txt2,"\nA aresta nao eh ponte");
  247. }
  248. break;
  249. case 13:
  250. inicio = clock();
  251. printf("Conjunto Dominante: %d\n",ConjuntoDominante(lista,nos));
  252. fim = clock();
  253. printf("tempo %f\n",(((float)(fim - inicio) / CLOCKS_PER_SEC)));
  254. break;
  255.  
  256. case 14:
  257. alfa =0.1;
  258. melhorSemente = 0;
  259. while(alfa<=(float)0.3){
  260. inicio = clock();
  261. for(i =0;i<30;i++){
  262. r = ConjuntoDominanteFatorAleatoriedade(lista,nos,alfa, i);
  263. if(r< best){
  264. best = r;
  265. melhorSemente = i;
  266. }
  267. }
  268. fim = clock();
  269. printf("Best %d para alfa %f tempo %f e semente %d\n",best,alfa,(((float)(fim - inicio) / CLOCKS_PER_SEC)),melhorSemente);
  270. melhorSemente = 0;
  271. alfa+=0.1;
  272. }
  273. break;
  274. case 15:
  275. melhorSemente = 0;
  276. inicio = clock();
  277.  
  278. for(i =0;i<30;i++){
  279. res = ConjuntoDominanteReativo(lista,nos, i);
  280. if(res.melhor< best){
  281. best = res.melhor;
  282. melhorSemente = i;
  283. melhorAlfa = res.alfa;
  284. }
  285. }
  286. fim = clock();
  287. printf("Best %d, tempo %f, semente %d e alfa %f\n",best,(((float)(fim - inicio) / CLOCKS_PER_SEC)),melhorSemente,melhorAlfa);
  288. melhorSemente = 0;
  289. break;
  290. case 16:
  291. exit(0);
  292. fclose(txt2);
  293. break;
  294. }
  295.  
  296. }
  297.  
  298. int main(int argc, char *argv[]){
  299. int fim = 0;
  300. Principal(argv);
  301. do{
  302. printf("\n\n\n\nDigite 1 para sair ou 0 para executar novamente:\n");
  303. scanf("%d",&fim);
  304. }while(fim!=1 && fim!=0);
  305. if(fim == 0){
  306. main(argc,argv);
  307. }
  308. int arr[8] = {110, 5, 10,3 ,22, 100, 1, 23};
  309. printf("%d", (sizeof(arr)/sizeof(arr[0]))-1);
  310. //QuickSortPivotAleatorio(arr, 0, (sizeof(arr)/sizeof(arr[0]))-1);
  311. //QuickSortPivotPrimeiroOuMeio(arr, 0, (sizeof(arr)/sizeof(arr[0]))-1);
  312. QuickSortPivotPrimeiroOuSegundo(arr, 0, (sizeof(arr)/sizeof(arr[0]))-1);
  313. print(arr, (sizeof(arr)/sizeof(arr[0])));
  314. return 0;
  315. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement