标题:ACM hdu 1175 连连看 WA 求解释 或 就错误的数据
只看楼主
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
结帖率:100%
已结贴  问题点数:40 回复次数:5 
ACM hdu 1175 连连看 WA 求解释 或 就错误的数据
http://acm.hdu.
总是WA
跪求大神  解释哪里有问题
 
 或者 给我一个 得不出正确结果的数据

我的代码
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
    int x,y;
}dui[50000000];
int n,m;
int map[1010][1010];
int mark[1010][1010];
int vis[1010][1010][4];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
int s_x,s_y,e_x,e_y;
void bfs()
{
    int head,tail;
    int i,j;
    struct node now,next;
    memset(mark,0,sizeof(mark));
    memset(vis,0,sizeof(vis));
    for(i=0;i<1002;i++)
        for(j=0;j<1002;j++)
        mark[i][j]=100000000;
    head=tail=0;
    dui[tail].x=s_x;
    dui[tail++].y=s_y;
    mark[s_x][s_y]=-1;
    vis[s_x][s_y][0]=1;
    while(head<tail)
    {
        now.x=dui[head].x;
        now.y=dui[head++].y;
        for(i=0;i<4;i++)
        {
            next.x=now.x+dir[i][0];
            next.y=now.y+dir[i][1];
            while(next.x>=0 && next.y>=0 && next.x<n && next.y<m && map[next.x][next.y]==0 && vis[next.x][next.y][i]==0)
            {
                if(mark[next.x][next.y]>=mark[now.x][now.y]+1)
                    mark[next.x][next.y]=mark[now.x][now.y]+1;
                else break;
                vis[next.x][next.y][i]=1;
                dui[tail].x=next.x;
                dui[tail++].y=next.y;
                next.x+=dir[i][0];
                next.y+=dir[i][1];
            }
        }
    }
    return ;
}
int main()
{
    int i,j;
    int q,ff_x,ff_y,ans;
    int flag;
    while(scanf("%d%d",&n,&m),n||m)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
                scanf("%d",&map[i][j]);
        }
        scanf("%d",&q);
        while(q--)
        {
            scanf("%d%d%d%d",&s_x,&s_y,&e_x,&e_y);
            ans=100000000;
            flag=1;
            s_x--; s_y--; e_x--; e_y--;
            if(map[s_x][s_y]==0 || map[e_x][e_y]==0 ||(map[s_x][s_y]!=map[e_x][e_y]) || (s_x==e_x && e_y==s_y))
                printf("NO\n");
            else
            {
                bfs();
                for(i=0;i<4;i++)
                {
                   ff_x=e_x+dir[i][0];
                   ff_y=e_y+dir[i][1];
                   if(ff_x<0 || ff_y<0 || ff_x>=n || ff_y>=m) continue;
                   if( (i==0 && vis[ff_x][ff_y][2]) || (i==1 &&vis[ff_x][ff_y][3]) || (i==2 && vis[ff_x][ff_y][0] ) ||(i==3 && vis[ff_x][ff_y][1]) )
                        flag=0;
                    if(ans>mark[ff_x][ff_y]+flag) ans=mark[ff_x][ff_y]+flag;
                }
                if(ans>2) printf("NO\n");
                else printf("YES\n");
            }
        }
    }
    return 0;
}
搜索更多相关主题的帖子: 连连看 color 
2013-05-08 15:45
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
得分:0 
2013-05-08 15:49
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
得分:14 
好大的数组
2013-05-08 16:13
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:14 
你的代码太耗空间了,先想个算法吧


[fly]存在即是合理[/fly]
2013-05-08 16:29
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
得分:0 
回复 4楼 azzbcc
空间是耗的大
主要是 防止 数组越界
可能不会需要这么大的空间的 这不会影响结果
就是 BFS啊
为什么会WA呢?
2013-05-08 16:33
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
得分:0 
回复 3楼 小xiong
开始并没有开这么大的数组  后来怕越界  就开大了
2013-05-08 16:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-406513-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.635234 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved