| ||||||||||
| 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 | |||||||||
为什么总是超时#include <stdio.h>
#include <math.h>
#define MAX 200000
#define RAN 300
struct pos{
int x,y;
};
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
struct pos tar;
int min, m, n;
int val[RAN][RAN];
int main()
{
int i,j;
struct pos start;
void dfs(int, int, int);
char ch;
scanf("%d%d",&m,&n);
while(m && n)
{
min = MAX;
for(i = 0;i < RAN; i++)
for(j = 0;j < RAN; j++) {
val[i][j]=0;
}
for(i = 0; i < m; i++) {
scanf("%c", &ch);
for(j = 0; j < n; j++) {
scanf("%c",&ch);
if(ch=='Y') {
start.x = i;
start.y = j;
}
if(ch=='T') {
tar.x = i;
tar.y = j;
val[i][j] = 1;
}
if(ch == 'E')
val[i][j] = 1;
if(ch == 'B')
val[i][j] = 2;
if(ch == 'R' || ch == 'S')
val[i][j]=MAX;
}
}
dfs(start.x, start.y, 0);
if (min != MAX)
printf("%d\n", min);
else
printf("-1\n");
scanf("%d%d", &m, &n);
}
return 0;
}
void dfs(int x, int y, int cost)
{
int i;
if (x == tar.x && y == tar.y) {
if (cost < min)
min = cost;
}
else if (cost + abs(tar.x - x) + abs(tar.y - y) < min)
for (i = 0; i < 4; i++) {
int tx = x + dx[i];
int ty = y + dy[i];
if (val[tx][ty] != MAX)
if (val[tx][ty] >= 0)
if (tx >= 0 && ty >= 0 && tx < m && ty < n) {
val[x][y] = -val[x][y];
dfs(tx, ty, cost + val[tx][ty]);
val[x][y] = -val[x][y];
}
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator