假设在 Linux 下我们有这样几个c文件和头文件,他们间的依赖关系如代码所示,那么我们如何编译呢?

hello.c

#include<stdio.h>
#include"print.h"
int main(void){
        printf("hello world\n");
        my_print();
        return 0;
}

print.c

#include<stdio.h>
#include"print.h"

void my_print(){
        printf("print in print.c\n");
}

print.h

void my_print();

一、 直接编译

gcc hello.c print.c -o hello

但是这样的一个缺点是当项目特别大的时候,无论 .c 文件相较于上一次编译的时候是否发生改变,下一次编译的时候都会再次编译一次,特别浪费时间,所有以有没有一个方法只编译改编过的源文件呢?这就是方法二利用 makefile 文件来自动编译

- 阅读剩余部分 -

编写程序,计算下面函数的值并输出。

muiti-case-simple.png

首先定义 vcIO.inc
.686         ;使用686指令集
.MODEL flat, stdcall       ;使用flat平坦内存模式
option casemap : none      ; 大小写不敏感

;函数声明
printf     PROTO C : dword,:vararg  ;vararg参数:变参,参数个数不确定
scanf     PROTO C : dword,:vararg  ;dword参数 :格式描述串的有效地址。
_getch    PROTO C : vararg         ;注意:所有的参数都是dword型!

- 阅读剩余部分 -

在给定的网格中,每个单元格可以有以下三个值之一:

值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,任何与腐烂的橘子(在 4
个正方向上)相邻的新鲜橘子都会腐烂。

返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。

题目链接: https://leetcode-cn.com/problems/rotting-oranges/

破题思路

每一轮,腐烂将会从每一个烂橘子蔓延到与其相邻的新鲜橘子上。一开始,腐烂的橘子拥有深度为 0,每一轮腐烂会从腐烂橘子传染到之相邻新鲜橘子上,并且设置这些新的腐烂橘子的深度为自己深度 +1,我们想知道完成这个过程之后的最大深度值是多少。

算法

我们可以用一个宽度优先遍历来建模这一过程。因为我们总是选择去使用深度值最小的(且之前未使用过的)腐烂橘子去腐化新鲜橘子,如此保证每一个橘子腐烂时的深度标号也是最小的。

我们还应该检查最终状态下,是否还有新鲜橘子。


- 阅读剩余部分 -