Main Page   Class Hierarchy   Compound List   File List   Contact   Download   Symbolic Constraints   Examples  

output.c

00001 #include<scil/scil.h>
00002 #include<scil/constraints/atour.h>
00003 #include<scil/constraints/path.h>
00004 //#include<scil/constraints/disjunctive.h>
00005 #include<LEDA/tuple.h>
00006 #include<LEDA/stream.h>
00007 #include<LEDA/string.h>
00008 #include<fstream.h>
00009 
00010 #define MULT 2
00011 
00012 using namespace SCIL;
00013 using namespace LEDA;
00014 
00015 typedef two_tuple<node, node> prec;
00016 
00017 LEDA::string read_next_line(istream& is) {
00018   LEDA::string s="#";
00019   while((!is.eof()) && ((s.head(1)=="#") || (s.length()==0) || (s.head(1)==" "))) {
00020     s.read_line(is);
00021   };
00022   if(is.eof()) s="";
00023   return s;
00024 };
00025 
00026 
00027 int main(int argc, char** argv) {
00028 
00029   // READ_GRAPH
00030 
00031   ifstream is(argv[1]);
00032 
00033   GRAPH<int,int> G;
00034 
00035   LEDA::string_istream si(read_next_line(is));
00036   int n,i,j,k,l,m;
00037 
00038   si>>n;
00039   LEDA::string Names[n+1];
00040 
00041   cout<<n<<" nodes in the graph\n";
00042 
00043   for(int i=0; i<n; i++) Names[i]=read_next_line(is);
00044 
00045   int C[n+1][n][n];
00046 
00047   while(!is.eof()) {
00048     string_istream si(read_next_line(is));
00049     si>>i;
00050     if(!si.eof()) {
00051       si>>j; si>>k; 
00052       leda_string ls;
00053       char ch;
00054       ls.read_line(si);
00055       l=0;
00056       for(int in=0; in<ls.length(); in++) {
00057         ch=ls[in];
00058         if(ch==',') l*=MULT;
00059         if(ch=='0') l=10*l  ;
00060         if(ch=='1') l=10*l+1;
00061         if(ch=='2') l=10*l+2;
00062         if(ch=='3') l=10*l+3;
00063         if(ch=='4') l=10*l+4;
00064         if(ch=='5') l=10*l+5;
00065         if(ch=='6') l=10*l+6;
00066         if(ch=='7') l=10*l+7;
00067         if(ch=='8') l=10*l+8;
00068         if(ch=='9') l=10*l+9;
00069       }
00070       if(i!=-1) 
00071         C[i][j][k]=l;
00072       else
00073         C[n][j][k]=l;
00074     }
00075   };
00076 
00077   ifstream is1(argv[2]);
00078 
00079   is1>>k;
00080 
00081   is1>>l;
00082   is1>>l;
00083 
00084   m=-1;l=n;
00085 
00086   list<int> L;
00087   int c1=0,c2=0;
00088 
00089   for(int i=0; i<=n; i++) {
00090     is1>>j; j=(j-2)/(2*n);
00091     L.append(j);
00092     if((m!=-1) && (l!=n) && (j!=n)) c1+=C[m][l][j];
00093     m=l; l=j;
00094     for(int j=1; j<2*n; j++) is1>>k;
00095   };
00096 
00097   m=-1;l=n;
00098   forall_rev(j, L) {
00099     if((m!=-1) && (l!=n) && (j!=n)) c2+=C[m][l][j];
00100     m=l; l=j;
00101   };
00102 
00103   cout<<c1<<" "<<c2<<endl;
00104 
00105   m=-1;l=n; int d=0;
00106   if(c1<c2) {
00107     forall(j,L) {
00108       if(m!=-1) { d+=C[m][l][j]; cout<<C[m][l][j]<<" cost\n"; }
00109       m=l; l=j;
00110       cout<<j<<" "<<Names[j]<<endl;
00111     }
00112   } else {
00113     forall_rev(j,L) {
00114       if(m!=-1) { d+=C[m][l][j]; cout<<C[m][l][j]<<" cost\n"; }
00115       m=l; l=j;
00116       cout<<j<<" "<<Names[j]<<endl;
00117     }
00118   }
00119   cout<<d<<" total cost\n";
00120 
00121   return (int) (d+0.5);
00122 };

Generated on Tue Nov 16 15:18:18 2004 for SCIL by doxygen1.2.16