00001 #include"mwt.h"
00002
00003
00004
00005
00006 #include<ctype.h>
00007 #include<fstream.h>
00008 #include<iostream.h>
00009
00010 int main(int argc, char* argv[]) {
00011
00012 ifstream is(argv[1]);
00013
00014
00015
00016
00017 int sequences;
00018 int edges;
00019 is >> sequences >> edges;
00020
00021 int length[sequences];
00022 char name[sequences][100];
00023 char stri[sequences][1000];
00024
00025 for(int i=0; i<sequences; i++) {
00026 is >> length[i] >> name[i] >> stri[i];
00027 cout<<name[i]<<" "<<stri[i]<<endl;
00028 };
00029
00030 int start_node[edges];
00031 int end_node[edges];
00032 int type[edges];
00033 double cost[edges];
00034 int sol[edges];
00035
00036 for(int i=0; i<edges; i++) {
00037 is >> start_node[i] >> end_node[i] >> type[i] >> cost[i];
00038 }
00039
00040 MWT(sequences, length, edges, start_node, end_node, type, cost, sol);
00041
00042 int SI[sequences+1], si[sequences+1];
00043 SI[0]=0;
00044 for(int i=0; i<sequences; i++) {
00045 SI[i+1]=SI[i]+length[i];
00046 si[i]=SI[i];
00047 };
00048 si[sequences]=SI[sequences];
00049
00050 int N[SI[sequences]][sequences];
00051 int S[SI[sequences]];
00052 int s=0;
00053 for(int i=0; i<SI[sequences]; i++) {
00054 if(i==SI[s+1]) s++;
00055 S[i]=s;
00056 for(int j=0; j<sequences; j++) N[i][j]=-1;
00057 };
00058
00059 for(int i=0; i<edges; i++) {
00060 if((sol[i]==1) && (type[i]==-1)) {
00061 N[start_node[i]][S[end_node[i]]]=end_node[i];
00062 N[end_node[i]][S[start_node[i]]]=start_node[i];
00063 }
00064 }
00065
00066 char os[sequences][1000];
00067
00068 int PN[sequences];
00069 bool b, cont;
00070 int p=0;
00071
00072 do {
00073 for(int i=0; i<sequences; i++) PN[i]=0;
00074 for(int i=0; i<sequences; i++) if(SI[i]<si[i+1]) {
00075 b=true;
00076 for(int j=0; j<sequences; j++) if(N[SI[i]][j]!=-1) {
00077 if (N[SI[i]][j]>SI[j])
00078 b=false;
00079 }
00080 if(b) PN[i]=1;
00081 }
00082
00083 cont=false;
00084 for(int i=0; i<sequences; i++) if(PN[i]==1) {
00085
00086 os[i][p]=(char) tolower(stri[i][SI[i]-si[i]]);
00087 SI[i]++;
00088 cont=true;
00089 } else os[i][p]='.';
00090 p++;
00091 } while(cont);
00092
00093 for(int i=0; i<sequences; i++) os[i][p-1]='\0';
00094
00095 for(int i=0; i<sequences; i++) cout<<os[i]<<endl;
00096
00097 char* mfsname=argv[2];
00098 ofstream msf(mfsname);
00099
00100 msf<<".PileUp\n\nMFS: 94 Type: P\n\n//\n";
00101
00102 for(int i=0; i<sequences; i++) {
00103 msf<<"\n "<<name[i]<<" "<<os[i];
00104 }
00105 msf<<endl<<endl;
00106
00107 return 0;
00108 }
00109