Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <sys/wait.h>
- struct ruta
- {
- //A A 0
- //B B 0
- //C C 1
- //C vecin cos+1
- char destinatie;
- char vecin;
- int cost;
- };
- int main(int argc, char *argv[])
- {
- //primul argument ii nodul curent
- //restul sunt vecinii
- int i,j;
- char argumentValues[100],aux;
- struct ruta listActuala[100];
- struct ruta listPrimita[100];
- for(i=1;i<99;i++)
- listActuala[i].cost=-1;
- listActuala[1].destinatie=argv[1][0];
- listActuala[1].vecin=argv[1][0];
- listActuala[1].cost=0;
- for(i=2;i<=argc-1;i++)
- argumentValues[i-1]=argv[i][0];
- for(i=1;i<=argc-3;i++)
- for(j=i+1;j<=argc-2;j++)
- {
- if(argumentValues[i]>argumentValues[j])
- {
- aux=argumentValues[i];
- argumentValues[i]=argumentValues[j];
- argumentValues[j]=aux;
- }
- }
- if(fork()==0)
- {
- while(1==1)
- {
- for(i=1;i<argc-1;i++)
- {
- int fd;
- char fisier[2];
- fisier[0]=argv[1][0];
- fisier[1]=argumentValues[i];
- fisier[2]=0;
- //mkfifo(fisier,0777);
- //printf("FIU: WRITE:%s %d\n",fisier,i);
- fd=open(fisier,O_WRONLY);
- write(fd,listActuala,100*sizeof(struct ruta));
- close(fd);
- unlink(fd);
- }
- //printf("GOOD FIU\n");
- }
- }
- else
- {
- int ii,jj;
- while(1==1)
- {
- int pas;
- for(pas=1;pas<argc-1;pas++)
- {
- int fd,lenP,lenA;
- char fisier[2];
- fisier[0]=argumentValues[pas];
- fisier[1]=argv[1][0];
- fisier[2]=0;
- //printf("PARINTE READ:%s %d\n",fisier,pas);
- mkfifo(fisier,0777);
- fd=open(fisier,O_RDONLY);
- read(fd,listPrimita,100*sizeof(struct ruta));
- lenP=1;
- while(listPrimita[lenP].cost!=-1)
- lenP++;
- printf("!!! %d !!!\n",lenP);
- lenA=1;
- while(listActuala[lenA].cost!=-1)
- lenA++;
- for(ii=1;ii<lenP;ii++)
- {
- int check=0;
- for(jj=1;jj<lenA;jj++)
- {
- if(listActuala[jj].destinatie==listPrimita[ii].destinatie)
- {
- check++;
- if(listActuala[jj].cost>(listPrimita[ii].cost+1))
- {
- listActuala[lenA].destinatie=listPrimita[ii].destinatie;
- listActuala[lenA].vecin=argumentValues[ii];
- listActuala[lenA].cost=1+listPrimita[ii].cost;
- }
- break;
- }
- }
- if(check==0)
- {
- printf("YES\n");
- listActuala[lenA].destinatie=listPrimita[ii].destinatie;
- listActuala[lenA].vecin=argumentValues[ii];
- listActuala[lenA].cost=1+listPrimita[ii].cost;
- }
- }
- }
- printf("\n\n\n");
- printf("~~~~~~~~~~\n");
- int step=1;
- while(listActuala[step].cost!=-1)
- {
- printf("%c %c %d\n",listActuala[step].destinatie,listActuala[step].vecin,listActuala[step].cost);
- step++;
- }
- //sleep(1);
- }
- wait(0);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement