题目链接;uva 10828 - Back to Kernighan-Ritchie
题目大意:给出一个有向图,从每个节点出发到每个后继节点的概率均等。当执行完一个没有后继的节点后,整个程序终止,程序从从编号1的节点开始。对于每次询问节点,给出每个节点的期望执行次数。
解题思路:大白书的例题。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 105;
const double eps = 1e-9;
double A[maxn][maxn];
int N, Q, d[maxn], inf[maxn];
vector<int> g[maxn];
void init () {
memset(d, 0, sizeof(d));
memset(inf, 0, sizeof(inf));
for (int i = 0; i < maxn; i++)
g[i].clear();
int u, v;
while (scanf("%d%d", &u, &v) == 2 && u + v) {
u--; v--;
d[u]++;
g[v].push_back(u);
}
memset(A, 0, sizeof(A));
for (int i = 0; i < N; i++) {
A[i][i] = 1;
for (int j = 0; j < g[i].size(); j++)
A[i][g[i][j]] -= 1.0 / d[g[i][j]];
if (i == 0)
A[i][N] = 1;
}
}
void gauss_jordan (double a[maxn][maxn], int n) {
for (int i = 0; i < n; i++) {
int r = i, p;
for (p = i + 1; p < n; p++)
if (fabs(a[p][i]) > fabs(a[r][i]))
r = p;
if (r != i) {
for (int j = 0; j <= n; j++)
swap (A[r][j], A[i][j]);
}
if (fabs(a[r][i]) < eps)
continue;
for (int k = 0; k < n; k++) {
if (k != i) {
for (int j = n; j >= i; j--)
a[k][j] -= a[k][i] / a[i][i] * a[i][j];
}
}
}
}
int main () {
int cas = 1, x;
while (scanf("%d", &N) == 1 && N) {
init();
gauss_jordan(A, N);
for (int i = N - 1; i >= 0; i--) {
if (fabs(A[i][i]) < eps && fabs(A[i][N]) > eps)
inf[i] = 1;
for (int j = i + 1; j < N; j++)
if (fabs(A[i][j]) > eps && inf[j])
inf[i] = 1;
}
scanf("%d", &Q);
printf("Case #%d:\n", cas++);
while (Q--) {
scanf("%d", &x);
x--;
if (inf[x])
printf("infinity\n");
else
printf("%.3lf\n", fabs(A[x][x]) < eps ? 0.0 : A[x][N] / A[x][x]);
}
}
return 0;
}
分享到:
相关推荐
由Kernighan和Ritchie撰写的C语言编程练习和学习。 我的工作和附带项目主要处理Python之类的高级语言。 我想提高我的经验和对C的理解,以便可以更好地了解我正在从事的工作的基础知识。 章节注释摘要 教程简介,第1...
Brian Kernighan & Dennis Ritchie:The C Programming Language.epub
最经典的C语言书!Second Edition
LK启发式TSP 实施解决旅行商问题的 Lin-Kernighan 启发式算法 步骤1 编译代码 g++ LKMain.cpp LKMatrix.cpp -o LKSolver 第2步 运行代码 更多详情、使用方法,请下载后阅读README.md文件
C语言编程 解决方案和对Kernighan和Ritchie的说明:C编程语言
The C Programming Language Exercise 1-3. Modify the temperature conversion program to print a heading above the table.
Lin-Kernighan heuristic for the TSP and minimum weight perfect matching
c-kernighan-ritchie锻炼
The ANSI C Programming Language (Kernighan & Ritchie) EN 英文原版 <br>学习标准C语言最好的入门书,结合Unix高级编程,将C语言讲得非常透彻 Chapter 1- A Tutorial Introduction Chapter 2- Types,...
Kernighan-Lin图分割算法的实现
C程序设计语言(第二版,中文版,B.W.Kernighan、D.M.Ritchie_著),c语言最经典、最权威的教材,是学习c语言的必看之书
Kernighan和Ritchie是指Brian w.Kernighan和Dennis M.Ritchie两人,他们是《C程序设计语言(The C Programming Language)》一书的作者。这是一本广为人知的书,许多人都亲切地称之为“K&R手册”、“白皮书”、“K&R...
KnR-C:选自Brian Kernighan和Dennis Ritchie的C编程语言练习
C程序设计语言(中文第二版·新版)Brian W. Kernighan Dennis M. Ritchie epub版
C程序设计语言(第2版*新版)(美)Brian W.Kernighan 、Dennis M.Ritchie。高清!
[C程序设计语言].The.C.Programming.Language By Brian W. Kernighan and Dennis M. Ritchie. 第二版 中文
这本书是学习c语言乃至是整个程序设计的圣经,请好好研习。
Kernighan和Dennis M. Ritchie编写的一部介绍标准C语言及其程序设计方法的权威性经典著作。全面、系统地讲述了C语言的各个特性及程序设计的基本方法,包括基本概念、类型和表达式、控制流、函数与程序结构、指针与...
matlab调用LKH求解器Lin-Kernighan启发式算法
《C程序设计语言》(第2版新版)是由C语言的设计者Brian W.Kernighan和Dennis M.Ritchie编写的一部介绍标准C语言及其程序设计方法的权威性经典著作。是一本较好的C语言入门书籍。 《C程序设计语言》(第2版新版)讲述...