首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

搜索有关问题,纠结了两天了,求指教

2012-02-09 
搜索问题,纠结了两天了,求指教http://acm.hdu.edu.cn/showproblem.php?pid1728是哪里错了,求帮助,给组不

搜索问题,纠结了两天了,求指教
http://acm.hdu.edu.cn/showproblem.php?pid=1728
是哪里错了,求帮助,给组不能通过的测试数据也行,谢谢了!

C/C++ code
#include <stdio.h>#include <math.h>#include <string.h>#include <algorithm>using namespace std;struct Point{    int x;    int y;    Point()    {        this->x=0;        this->y=0;    }    bool check(int m,int n);    void move(int i);    bool eq(Point p);};bool Point::check(int m,int n){     if(this->x>=0&&this->x<m&&this->y>=0&&this->y<n)     {         return true;                }     else     {         return false;         }}void Point::move(int i){    int fx[4][2]={{0,-1},{1,0},{0,1},{-1,0}};    this->x+=fx[i][0];    this->y+=fx[i][1];}bool Point::eq(Point p){    if(this->x==p.x && this->y==p.y)    {        return true;    }    else    {        return false;    }}char map[100][100]={0};int mk[100][100]={0};int m,n;Point Q[10240];bool bfs(Point s,Point e){    int h=0,f=0;    Q[f++]=s;    while(h<f)    {        if(Q[h].eq(e) && mk[Q[h].y][Q[h].x]>=0)        {            return true;        }        else if(mk[Q[h].y][Q[h].x]>0)        {            for(int i=0;i<4;i++)            {                Point np =Q[h];                np.move(i);                while(np.check(m,n) && map[np.y][np.x]=='.' && mk[np.y][np.x]==-1)                {                    mk[np.y][np.x]=mk[Q[h].y][Q[h].x]-1;                    Q[f++]=np;                    np.move(i);                }            }        }        h++;    }    return false;}int main(int argc, char *argv[]){    int num;    while(scanf("%d",&num)!=EOF)    {         for(int i=0;i<num;i++)         {            memset(map,0,sizeof(map));            memset(mk,-1,sizeof(mk));            scanf("%d %d",&n,&m);            for(int y=0;y<n;y++)            {                scanf("%s",map[y]);            }            int k,x1,y1,x2,y2;            scanf("%d %d %d %d %d",&k,&x1,&y1,&x2,&y2);            x1--;y1--;x2--;y2--;            Point s,e;            s.x=x1;s.y=y1;            e.x=x2;e.y=y2;            mk[s.y][s.x]=k+1;            printf("%s\n",bfs(s,e)?"yes":"no");         }                            }    return 0;}


[解决办法]
这个网上到处都是解题报告,看看自己算法有没有问题,如果没问题的话,可能是细节出了问题,建议自己生成一些数据在Ac的程序上测试,再测试自己的
[解决办法]
楼主,你能说说你的程序有什么问题吗?
是编译通不过,还是运行时崩溃,还是结果不正确。

难道要别人帮你发现问题?

热点排行