减少运行时间耗费的技巧

来源:互联网 发布:get it beauty2015 编辑:程序博客网 时间:2024/04/29 17:58

很多人误以为宏是在程序运行时被替换的,所会定义宏会浪费运行时间。其实宏时在编译时被替换的,不会占用运行时间。定义宏是有很多好处的,在此我就不细说了。


函数调用很占用运行时间,如果在一段程序中有一个函数被频繁的调用,可以将其直接写在上层函数中(单单从考虑运行时间的角度,不仅比写成函数的形式要好,而且好很多,即使函数是内敛的,也不如直接写进上层函数好)。


当大家所要编写的程序对运行时间要求比较高的时候,小编在这里给的建议是:

1、不要害怕使用用宏,宏对运行时间没有影响

2、反复使用的语句可以先写成函数,在数据测试成功之后,将这些函数写进上层函数中


e.g.

此段程序在某个测试数据环境下,如果使用内敛函数,运行时间为1000ms+;如果直接把比较写进上层函数,则运行时间为795ms

#include <stdio.h>


#define DOG 'S'
#define WALL 'X'
#define DOOR 'D'
#define EMPTY '.'

#define YES 1
#define NO 0

#define VISITED 1
#define UNVISITED 0

#define MAX 10

int n,m,t;
char maze[MAX][MAX];
int vis[MAX][MAX];
int res;

void Init() {
    int i,j;

    for (i = 0;i < MAX;i++)
        for (j = 0;j < MAX;j++)
            vis[i][j] = UNVISITED;

    return;
}

//inline bool IsInMaze(int i,int j) {

//    if (1 <= i && i <= n

//     && 1 <= j && j <= m

//     && vis[i][j] == UNVISITED)

//        return true;

//    else false;

//}


void Visit(int i,int j,int deep) {
    if (deep > t || res == YES) return;
    
    if (deep == t && maze[i][j] == DOOR) {
        res = YES;
        return;
    }
    
    if (maze[i][j] == EMPTY || maze[i][j] == DOG) {
        vis[i][j] = VISITED;

//        if (IsInMaze(i+1,j)) Visit(i+1,j,deep+1);
//        if (IsInMaze(i-1,j)) Visit(i-1,j,deep+1);
//        if (IsInMaze(i,j+1)) Visit(i,j+1,deep+1);
//        if (IsInMaze(i,j-1)) Visit(i,j-1,deep+1);

        if (i+1 <= n && vis[i+1][j] == 0) Visit(i+1,j,deep+1);
        if (1 <= i-1 && vis[i-1][j] == 0) Visit(i-1,j,deep+1);
        if (j+1 <= m && vis[i][j+1] == 0) Visit(i,j+1,deep+1);
        if (1 <= j-1 && vis[i][j-1] == 0) Visit(i,j-1,deep+1);  
    

        vis[i][j] = UNVISITED;
    }

    return;
}

int main() {
    int i,j,k;
    int S_i,S_j;
    
    while (scanf("%d%d%d",&n,&m,&t) != EOF && (n||m||t)) {
        for (i = 1;i <= n;i++) {
            for (j = 1;j <= m;j++) {
                while (scanf("%c",&maze[i][j])
                    && maze[i][j] != DOG
                    && maze[i][j] != WALL
                    && maze[i][j] != DOOR
                    && maze[i][j] != EMPTY);
                
                if (maze[i][j] == DOG) {
                    S_i = i;
                    S_j = j;
                }
            }
        }
        
        res = NO;        
        Init();

        Visit(S_i,S_j,0);    

        if (res == YES) printf("YES\n");
        else printf("NO\n");    
    }

    return 0;

}


——1010

1 0
原创粉丝点击