[shkola] Re: typi wyprosi i oshte po-typo predstavqne
- From: Bono Nonchev <madcow@xxxxxx>
- To: shkola@xxxxxxxxxxxxx
- Date: Mon, 24 Nov 2003 11:32:46 +0200 (EET)
veche kogato vidq v pyrviq red desetoklasnici, bychvarova i t.n. triq. i na men
mi omryzna, a nai veche zashtoto ivo e prav, i samo se opravdava. a nie mai
nishto ne napravihme. prashtam vi debugnatoto reshenie, tova, koeto TRQBVASHE
da predam, no ne mojah da napisha. moje da e N^4, ama shtqha da dadat pone 30
t, pyk i bez piramida po-malko nqma kak da stane. malko me e qd.
nishto, sega da se sysredotochim v sledvashtoto systezanie - zimnoto.
//chase
#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
//#include "stdio.h"
#define MAXVALUE 100000
#define min(a,b) ((a)<(b)?(a):(b))
#define swap(a,b) {temp=a;a=b;b=temp;}
int M,N,K,DS;
int bf[100][100];
int al[50][2];
int distg[10000], visg[10000];
int dist[10000], vis[10000];
int lastmanstanding=0;
int gj(int a)
{return a%M;}
int gi(int a)
{return a/M;}
int gc(int i, int j)
{return i*M+j;}
int price(int a)
{return bf[gi(a)][gj(a)];}
int adj(int a, int b)
{
int i1=gi(a), j1=gj(a), i2=gi(b), j2=gj(b);
if(bf[i1][j1]==MAXVALUE||bf[i2][j2]==MAXVALUE)
return MAXVALUE;
else if((i1%2)==0)
{
if((i1==(i2+1)&&j1==(j2+1))||(i1==(i2+2)&&j1==(j2))||(i1==(i2+1)&&j1==(j2))||
(i1==(i2-1)&&j1==(j2))||(i1==(i2-2)&&j1==(j2))||(i1==(i2-1)&&j1==(j2+1)))
return bf[i1][j1];
}
else
{
if((i1==(i2+1)&&j1==(j2))||(i1==(i2+2)&&j1==(j2))||(i1==(i2+1)&&j1==(j2-1))||
(i1==(i2-1)&&j1==(j2-1))||(i1==(i2-2)&&j1==(j2))||(i1==(i2-1)&&j1==(j2)))
return bf[i1][j1];
}
return MAXVALUE;
}
void dijkstra(int a)
{
int i;
for(i=0;i<DS;i++)
{
dist[i]=adj(a,i);
vis[i]=0;
}
dist[a]=0;
vis[a]=1;
int mindist, u;
while(1)
{
mindist=MAXVALUE;
for(i=0;i<DS;i++)
if(!vis[i]&&dist[i]<mindist)
{
mindist=dist[i];
u=i;
}
if(mindist==MAXVALUE) break;
vis[u]=1;
for(i=0;i<DS;i++)
dist[i]=min(dist[i], dist[u]+adj(u,i));
}
}
void dijkstrag(int a)
{
int i;
for(i=0;i<DS;i++)
{
distg[i]=(price(a)<=dist[a] ? adj(a,i) : MAXVALUE);
visg[i]=0;
}
distg[a]=0;
visg[a]=1;
int mindist, u;
while(1)
{
mindist=MAXVALUE;
for(i=0;i<DS;i++)
if(!visg[i]&&distg[i]<mindist)
{
mindist=distg[i];
u=i;
}
if(mindist==MAXVALUE) break;
visg[u]=1;
if(dist[u]<(mindist+price(u)))
{distg[i]=MAXVALUE;continue;}
for(i=0;i<DS;i++)
{
distg[i]=min(distg[i], distg[u]+adj(u,i));
}
}
}
void dijkstral()
{
int i,j;
for(i=0;i<DS;i++)
{
dist[i]=MAXVALUE;
vis[i]=0;
}
for(j=0;j<K;j++)
{
for(i=0;i<DS;i++)
{
dist[i]=min(dist[i], adj(gc(al[j][0], al[j][1]),i));
}
vis[gc(al[j][0], al[j][1])]=1;
dist[gc(al[j][0], al[j][1])]=0;
}
int mindist, u;
while(1)
{
mindist=MAXVALUE;
for(i=0;i<DS;i++)
if(!vis[i]&&dist[i]<mindist)
{
mindist=dist[i];
u=i;
}
if(mindist==MAXVALUE) break;
vis[u]=1;
for(i=0;i<DS;i++)
dist[i]=min(dist[i], dist[u]+adj(u,i));
}
}
int main()
{
int i,j,x,y;
char c[100];
cin>>N>>M>>K;
DS=M*N;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
bf[i][j]=MAXVALUE;
for(i=0;i<N;i++)
{
cin>>c;
for(j=0;j<M;j++)
if(c[j]!='X')
bf[i][j]=c[j]-'0';
}
cin>>x>>y;
x--;
y--;
for(i=0;i<K;i++)
{
cin>>al[i][0]>>al[i][1];
al[i][0]--;
al[i][1]--;
}
dijkstral();
dijkstrag(gc(x,y));
lastmanstanding=0;
for(i=0;i<DS;i++)
if(distg[i]!=MAXVALUE&&lastmanstanding<dist[i])
lastmanstanding=dist[i];
cout<<lastmanstanding;
return 0;
}
-----------------------------------------------------------------
http://www.sosbg.org - Направете още едно дете щастливо - 0881722 - за тях!
Other related posts:
- » [shkola] Re: typi wyprosi i oshte po-typo predstavqne