zoukankan      html  css  js  c++  java
  • Tempter of the Bone

    代码运行时间,不能小于1000ms,很奇怪,

    1.将字符数组改成整形数组,无效

    2.将work()的参数由一维整形数组换成整形变量,无效

    3.将动态申请空间改为静态申请,无效

    ///////////////////////////////////////////////////////

    最后加了一个return,解决了

    我觉得应该是加了return后就少做一次if判断

    ///编程要严谨啊

    #include<iostream>
    using namespace std;
    
    void work(char **map, int T, int S0, int S1, int &S2, int D0, int D1, int N, int M)
    {
    	if (S0 == D0 && S1 == D1)					//判断到出口
    	{
    		if (T == 0)								//判断到出口时走了几步
    			S2 = 1;
    		return;										//*****************这个return节省了时间**************
    	}
    	if (S2 == 0 && T > 0)						//没有走出,并且还有步数剩余才递归
    	{
    		map[S0][S1] = 'E';
    		if (S0 + 1 < N&&map[S0 + 1][S1] != 'X'&&map[S0 + 1][S1] != 'E')	//down
    		{
    			work(map, T - 1, S0 + 1, S1, S2, D0, D1, N, M);
    		}
    		if (S1 + 1 < M&&map[S0][S1 + 1] != 'X'&&map[S0][S1 + 1] != 'E')		//right
    		{
    			work(map, T - 1, S0, S1 + 1, S2, D0, D1, N, M);
    		}
    		if (S0 - 1 >= 0 && map[S0 - 1][S1] != 'X'&&map[S0 - 1][S1] != 'E')	//up
    		{
    			work(map, T - 1, S0 - 1, S1, S2, D0, D1, N, M);
    		}
    		if (S1 - 1 >= 0 && map[S0][S1 - 1] != 'X'&&map[S0][S1 - 1] != 'E')  //left
    		{
    			work(map, T - 1, S0, S1 - 1, S2, D0, D1, N, M);
    		}
    		map[S0][S1] = '.';
    	}
    	else
    		return;
    }
    
    int main()
    {
    	int N, M, T, S0, S1, S2, D0, D1;
    	char **map;
    	cin >> N >> M >> T;
    	while (N != 0 && M != 0 && T != 0)
    	{
    		map = new char*[N];
    		for (int i = 0; i < N; i++)
    		{
    			map[i] = new char[M];                   //动态数组初始化
    			for (int j = 0; j < M; j++)
    			{
    				cin >> map[i][j];
    				if (map[i][j] == 'S')
    				{
    					S0 = i; S1 = j; S2 = 0;
    				}
    				if (map[i][j] == 'D')
    				{
    					D0 = i; D1 = j;
    				}
    			}
    		}
    		work(map, T, S0, S1, S2, D0, D1, N, M);
    		if (S2 == 1)
    			cout << "YES" << endl;
    		else
    			cout << "NO" << endl;
    		cin >> N >> M >> T;
    	}
    	return 0;
    }


  • 相关阅读:
    导航控制器的出栈
    UIPickView的基本使用
    多控制器
    通过Xib加载控制器的View
    从StoryBoard加载控制器
    模仿UIApplication单例
    LaunchScreen原理
    UIWindow
    指定初始化的运用
    零长度数组在内核中的运用
  • 原文地址:https://www.cnblogs.com/A-yes/p/9894261.html
Copyright © 2011-2022 走看看