您的位置:首页 > 其它

减少运行时间耗费的技巧

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

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

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: