讨论 / 寻求大神
happy 2011-10-20 17:40:00
点我顶贴 收藏 删除
#include <stdio.h>

int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};

int map[310][301]={0};

int dist[310][310]={0};

int vis[310][310]={0};

int f[310][310]={0};

int q[310*310]={0};

int main()

{

int n,i,j;

scanf("%d",&n);

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

{

int x,y,t;

scanf("%d%d%d",&x,&y,&t);

if(map[x][y]>t||map[x][y]==0)

{

map[x][y]=t;

vis[x][y]=1;

}

for(i=0;i<4;i++)

{

int xx=x+dx[i],yy=y+dy[i];

if(xx>=0&&xx<=301&&yy>=0&&yy<=301)

if(map[xx][yy]>t||map[xx][yy]==0)

{

map[xx][yy]=t;

vis[xx][yy]=1;

}

}

}

int front=0,rear=0;

q[rear++]=0;

f[0][0]=1;

int falg=0;

while(front<rear)

{

int x=q[front]/100,y=q[front]%100;

for(i=0;i<4;i++)

{

int xx=x+dx[i],yy=y+dy[i];

if(xx>=0&&yy>=0&&xx<=301&&yy<=301)

if(!f[xx][yy])

{

if(vis[xx][yy]&&map[xx][yy]>dist[x][y]+1)

{

q[rear++]=xx*100+yy;

dist[xx][yy]=dist[x][y]+1;

f[xx][yy]=1;

}

else if(!vis[xx][yy])

{

printf("%d",dist[x][y]+1);

falg=1;

break;

}

}

}

front++;

if(falg) break;

}

if(!falg)

printf("-1");

//system("pause");

return 0;

}

你们给看看 为什么第五组数据过不了啊

查看更多回复
提交回复