hdoj-1010-c++

思路:DFS(深度优先搜索),基本参照dfs的框架写就好。

结果:第一次自己的代码超时了。。后来查看了通过的代码(参照https://blog.csdn.net/u014174811/article/details/41293209)后发现可能是我多使用了一次循环来申请空间——而参考代码是直接利用了规则(图大小不超过7*7),可能申请空间的循环需要花费额外的时间(毕竟AC的代码时间是998ms,仅比要求少了2ms)。

补充:在两段代码中分别加了时间函数,运行一个示例差不多都是0.29秒,不知道为什么会超时。。。如果发现了回来再次补充。

附代码:

#include

#include


using namespace std;


void dfs(int x,int y,int step);


char **map;

int **book;

int N,M,T;

bool flag;


int main(){

    while(cin>>N>>M>>T&&(T+N+M)){

        clock_t starttime,endtime;

        starttime = clock();

        int stepnum = 0;

        flag = false;

        int x_start=0,y_start=0;

       //apply for new space

        map = new char *[N];

        book = new int *[N];

        for(int i=0;i<N;i++){

            map[i] = new char[M];

            book[i] = new int[M];

        }

       

        for(int i=0;i<N;i++){

            for(int j=0;j<M;j++){

                cin>>map[i][j];

                if(map[i][j]=='S'){

                    x_start = i;y_start = j;

                }

                book[i][j] = 0;

            }

        }


        dfs(x_start, y_start,stepnum);


        if(flag==true)

            cout<<"YES"<<endl;

        else

            cout<<"NO"<<endl;

        //test time

        endtime = clock();

        cout<<(double)clock() /CLOCKS_PER_SEC<< "s" << endl;

    }

    return 0;

}


void dfs(int x,int y,int step){

    

    //find if the doggie has arrived at the door and if the time is suitable;

    if(step>T)

        return;

    else if(map[x][y]=='D'){

        if(step==T){

            flag=true;

        }

        return;

    }

    //do dfs if all conditions are satisfied.

    else{

        if(map[x][y]=='.'||map[x][y]=='S'){

            book[x][y] = 1;

            if(x+1<N&&book[x+1][y]==0)

                dfs(x+1,y,step+1);

            if(x-1>=0&&book[x-1][y]==0)

                dfs(x-1, y, step+1);

            if(y+1<M&&book[x][y+1]==0)

                dfs(x, y+1, step+1);

            if(y-1>=0&&book[x][y-1]==0)

                dfs(x, y-1, step+1);

            book[x][y] = 0;

        }

    }

    return;

}



你可能感兴趣的:(hdoj)