| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
这个题有点错,PE,space-separated,为什么注释掉就过,不注释PE#include <stdio.h>
#include <memory.h>
int rows,cols;
unsigned int map[20][20];
unsigned int steps[20][20];
unsigned int times[20][20];
double factor[20][20];
struct location{
int x,y;
} site[20], queue[410];
int xOffset[4] = {-1,1,0,0};
int yOffset[4] = {0,0,-1,1};
int siteValid(int x,int y)
{
if(x>=0 && x<rows && y>=0 && y<cols)
return steps[x][y];
else return 500;
}
void loadFactors(int x,int y, double load)
{
factor[x][y] += load * times[x][y];
int point = steps[x][y];
if(point <=1) return;
point --;
int i;
for(i=0;i<4;i++)
if(siteValid(x+xOffset[i],y+yOffset[i]) == point)
loadFactors(x+xOffset[i],y+yOffset[i],load);
}
int main()
{
int i,j;
char temp[22];
char c;
scanf("%d %d",&cols,&rows);
// scanf("%c",&c);
for(i=0;i<rows;i++)
{
scanf("%s",temp);
// printf("%s",temp);
for(j=0;j<cols;j++)
{
if(temp[j]=='.')map[i][j] = 0;
else {
map[i][j] = (temp[j]-='@');
if(temp[j] != 'X'-'@')
{
site[--temp[j]].x = i;
site[temp[j]].y = j;
}
}
}
//scanf("%c",&c);
//printf("%d",i);
}
// printf("%c",c);
memset(factor,0,sizeof(factor));
char c1,c2;
int load;
double loadper;
while(1)
{
scanf("%s",temp);
scanf("%d",&load);
c1 = temp[0];
c2 = temp[1];
//scanf("%c %c %d\n",&c1,&c2,&load);
//scanf("%c",&c);
//scanf("%c",&c1);
// scanf("%c",&c2);
//scanf("%d",&load);
// printf("%c %c %d\n",c1,c2,load);
if(c1 == 'X' && c2 == 'X') break;
memset(steps,255,sizeof(steps));
memset(times,0,sizeof(times));
c1 -= 'A';
c2 -= 'A';
queue[0].x = site[c1].x;
queue[0].y = site[c1].y;
steps[queue[0].x][queue[0].y] = 0;
times[queue[0].x][queue[0].y] = 1;
int dx = site[c2].x;
int dy = site[c2].y;
map[dx][dy]=0;
int x0,y0,x1,y1;
unsigned int bb;
unsigned int aa;
int first=0,last=0;
while(first <= last)
{
//if(steps[dx][dy] < 410) break;
x0 = queue[first].x;
y0 = queue[first].y;
if(x0 == dx && y0 == dy) break;
bb = steps[x0][y0];
aa = times[x0][y0];
bb++;
for(i=0;i<4;i++)
{
x1 = x0+xOffset[i];
y1 = y0+yOffset[i];
int valid = 500;
if(x1 >= 0 && x1 < rows && y1 >= 0 && y1 <cols)
valid = map[x1][y1];
if(valid == 0 && steps[x1][y1] > bb)
{
steps[x1][y1]=bb;
last++;
queue[last].x=x1;
queue[last].y=y1;
}
if(bb == steps[x1][y1])
times[x1][y1]+=aa;
}
first++;
}
/* first = last = 0;
while(first <= last)
{
x0 = queue[first].x;
y0 = queue[first].y;
bb = times[x0][y0];
int temStep = steps[x0][y0];
temStep++;
for(i=0;i<4;i++){
x1 = x0+xOffset[i];
y1 = y0+yOffset[i];
if(siteValid(x1,y1) == temStep)
{
if(times[x1][y1] == 0)
{
last++;
queue[last].x=x1;
queue[last].y=y1;
}
times[x1][y1]+=bb;
}
}
first++;
}*/
map[dx][dy] = (++c2);
loadper =((double)(load))/times[dx][dy];
loadFactors(dx,dy,loadper);
}
for(i=0;i<rows;i++){
for(j=0;j<cols;j++)
{
if(map[i][j] != 0) factor[i][j] = 0;
// if(j!=0) printf(" ");
" "
" "
printf("%7.2lf",factor[i][j]);
}
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator