Пошук в глибину Печать
Добавил(а) Administrator   
02.10.13 00:00

 

 

#include "stdafx.h"

#include "fstream"

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

int a[101][101],c[101],v1,v2,n,m;

void p(int k, int v)

{c[k]=v;

if (v==v2 || k>=n) {

if (v==v2)

{

//for (int i=1;i<=k;i++)cout<<c[i]<<" ";cout<<endl;

int s=0;

for (int i=1;i<k;i++)s=s+a[c[i]][c[i+1]];

//cout<<"s="<<s<<endl;

if (s<m) m=s;

}

}

else

for (int i=1;i<=n;i++)

if (a[v][i]>0) p(k+1,i);

}

int main()

{int i,j,t,k;

cin>>n>>m;

for (i=1;i<=n;i++)

for (j=1;j<=n;j++)a[i][j]=0;

for (k=1;k<=m;k++)

{cin>>i>>j>>t;

a[i][j]=t;a[j][i]=t;

}

cin>>v1>>v2;

/* for (i=1;i<=n;i++){

for (j=1;j<=n;j++)

cout<<a[i][j]<<" ";

cout<<endl;

}

*/

//cout<<v1<<" "<<v2<<endl;

m=10000000;

p(1,v1);

if (m>=10000000)m=-1;

cout<<m<<endl;

return 0;

}

 

program Project2;

{$APPTYPE CONSOLE}

var a:array[1..100,1..100] of integer;

smin,i,j,k,l,n,s:integer;

rez,c:array [1..100]of integer;

f1,f2:text;

function f(nn,vv:integer):boolean;

var pr:boolean;

i:integer;

begin

pr:=true;

for i:=1 to nn do

if vv=c[i] then pr:=false;

f:=pr;

end;

procedure p(ni,v:integer);

var s,ii:integer;

begin

c[ni]:=v;

if(ni=n)then begin

{***** 1}

s:=0;

for ii:=1 to ni-1 do s:=s+a[c[ii],c[ii+1]];

s:=s+a[c[n],c[1]];

if s<smin then begin

for ii:=1 to ni do rez[ii]:=c[ii];

smin:=s;

end;

end

else

for ii:=1 to n do

if (a[v,ii]>0)and (f(ni,ii)) then p(ni+1,ii);

end;

begin

assign(f1,'graph.dat');reset(f1);assign(f2,'graph.sol');rewrite(f2);

write('N=');

readln(n);

for i:=1 to n do

for j:=i+1 to n do begin

a[i,j]:=random(50)+1;a[j,i]:=a[i,j];

end;

smin:=maxint;

p(1,1);

close(f1);

writeln(f2,n);

for i:=1 to n do begin

for j:=1 to n-1 do

write(f2,a[i,j]:3);

writeln(f2,a[i,n]:3);

end;

writeln(f2,'-------------------');

for i:=1 to n-1 do write(f2,rez[i],' ' );

writeln(f2,rez[n] );

writeln(f2,smin);

close(f2);

end.