cycle_coloring.dart 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import 'package:flutter/material.dart';
  2. import 'tool_kit.dart';
  3. /// n 边形染色:用 k 种颜色给 n 边形的 n 个顶点染色,相邻顶点不同色。
  4. ///
  5. /// 圈图 Cₙ 的色多项式是 (k−1)ⁿ + (−1)ⁿ(k−1)。
  6. class CycleColoringPage extends StatefulWidget {
  7. const CycleColoringPage({super.key});
  8. @override
  9. State<CycleColoringPage> createState() => _CycleColoringPageState();
  10. }
  11. class _CycleColoringPageState extends State<CycleColoringPage> {
  12. final _n = ToolField('n (边数)', hint: '不小于 3 的整数',
  13. keyboard: TextInputType.number);
  14. final _k = ToolField('k (颜色数)', hint: '正整数', keyboard: TextInputType.number);
  15. @override
  16. Widget build(BuildContext context) => ToolScaffold(
  17. title: 'n 边形染色',
  18. fields: [_n, _k],
  19. intro: const Text('用 k 种颜色给 n 边形的顶点染色,相邻顶点不同色\n'
  20. '方案数 = (k−1)ⁿ + (k−1)·(−1)ⁿ'),
  21. compute: (session) async {
  22. final n = int.tryParse(_n.text);
  23. final k = int.tryParse(_k.text);
  24. if (n == null || n < 3) throw Exception('n 要填一个不小于 3 的整数');
  25. if (k == null || k < 1) throw Exception('k 要填一个正整数');
  26. return exactAndApprox(
  27. session,
  28. '染色方案数',
  29. '($k-1)^$n + ($k-1)*(-1)^$n',
  30. );
  31. },
  32. );
  33. }