Advertisement
Guest User

Untitled

a guest
Dec 10th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <unistd.h>
  7. #include <sys/wait.h>
  8.  
  9. struct ruta
  10. {
  11.  
  12. //A A 0
  13. //B B 0
  14. //C C 1
  15. //C vecin cos+1
  16. char destinatie;
  17. char vecin;
  18. int cost;
  19. };
  20. int main(int argc, char *argv[])
  21. {
  22. //primul argument ii nodul curent
  23. //restul sunt vecinii
  24.  
  25. int i,j;
  26. char argumentValues[100],aux;
  27.  
  28. struct ruta listActuala[100];
  29. struct ruta listPrimita[100];
  30. for(i=1;i<99;i++)
  31. listActuala[i].cost=-1;
  32. listActuala[1].destinatie=argv[1][0];
  33. listActuala[1].vecin=argv[1][0];
  34. listActuala[1].cost=0;
  35.  
  36. for(i=2;i<=argc-1;i++)
  37. argumentValues[i-1]=argv[i][0];
  38. for(i=1;i<=argc-3;i++)
  39. for(j=i+1;j<=argc-2;j++)
  40. {
  41. if(argumentValues[i]>argumentValues[j])
  42. {
  43. aux=argumentValues[i];
  44. argumentValues[i]=argumentValues[j];
  45. argumentValues[j]=aux;
  46. }
  47. }
  48. if(fork()==0)
  49. {
  50. while(1==1)
  51. {
  52. for(i=1;i<argc-1;i++)
  53. {
  54. int fd;
  55. char fisier[2];
  56. fisier[0]=argv[1][0];
  57. fisier[1]=argumentValues[i];
  58. fisier[2]=0;
  59. //mkfifo(fisier,0777);
  60. //printf("FIU: WRITE:%s %d\n",fisier,i);
  61. fd=open(fisier,O_WRONLY);
  62. write(fd,listActuala,100*sizeof(struct ruta));
  63. close(fd);
  64. unlink(fd);
  65. }
  66. //printf("GOOD FIU\n");
  67. }
  68. }
  69.  
  70. else
  71. {
  72. int ii,jj;
  73. while(1==1)
  74. {
  75. int pas;
  76. for(pas=1;pas<argc-1;pas++)
  77. {
  78. int fd,lenP,lenA;
  79. char fisier[2];
  80. fisier[0]=argumentValues[pas];
  81. fisier[1]=argv[1][0];
  82. fisier[2]=0;
  83. //printf("PARINTE READ:%s %d\n",fisier,pas);
  84. mkfifo(fisier,0777);
  85. fd=open(fisier,O_RDONLY);
  86. read(fd,listPrimita,100*sizeof(struct ruta));
  87. lenP=1;
  88. while(listPrimita[lenP].cost!=-1)
  89. lenP++;
  90. printf("!!! %d !!!\n",lenP);
  91. lenA=1;
  92. while(listActuala[lenA].cost!=-1)
  93. lenA++;
  94. for(ii=1;ii<lenP;ii++)
  95. {
  96. int check=0;
  97. for(jj=1;jj<lenA;jj++)
  98. {
  99. if(listActuala[jj].destinatie==listPrimita[ii].destinatie)
  100. {
  101. check++;
  102. if(listActuala[jj].cost>(listPrimita[ii].cost+1))
  103. {
  104. listActuala[lenA].destinatie=listPrimita[ii].destinatie;
  105. listActuala[lenA].vecin=argumentValues[ii];
  106. listActuala[lenA].cost=1+listPrimita[ii].cost;
  107. }
  108. break;
  109. }
  110. }
  111. if(check==0)
  112. {
  113. printf("YES\n");
  114. listActuala[lenA].destinatie=listPrimita[ii].destinatie;
  115. listActuala[lenA].vecin=argumentValues[ii];
  116. listActuala[lenA].cost=1+listPrimita[ii].cost;
  117. }
  118. }
  119. }
  120. printf("\n\n\n");
  121. printf("~~~~~~~~~~\n");
  122. int step=1;
  123. while(listActuala[step].cost!=-1)
  124. {
  125. printf("%c %c %d\n",listActuala[step].destinatie,listActuala[step].vecin,listActuala[step].cost);
  126. step++;
  127. }
  128. //sleep(1);
  129. }
  130. wait(0);
  131. }
  132. return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement