POJ-1680(递归模拟)

来源:互联网 发布:从unix到linux 乱码 编辑:程序博客网 时间:2024/05/18 00:45

题目:http://poj.org/problem?id=1680

分析:父进程wait会等到子进程执行完成之后才继续下一步,每个进程都执行相同的代码,刚好和递归函数调用的方式一致。

需要注意的是【ProcessID==0】每个子进程仅打印一次,对应到递归调用中,就是进入函数时打印一次。

由于题目只要求获得打印的某一行,这里可以优化递归的退出条件,不需要执行到底:发现当前打印的是目标行就退出整个递归。


#include <cstdio>const int kRoot = 1000;int N, K, P;bool dfs(int i, int a, int p){if(p != kRoot){if(--K == 0){printf("Process ID=%d, A=%d\n", p, a);return true;}}while(i < N){if(--K == 0){printf("Loop %d: Process ID=%d\n", i, p);return true;}a += 7;if(dfs(++i, a, ++P)) return true;}return false;}int main(){int t;for(scanf("%d", &t); t--; ){scanf("%d%d", &N, &K);dfs(0, 0, P = kRoot);}return 0;}

0 0
原创粉丝点击