Tải bản đầy đủ (.doc) (4 trang)

Bài toán tô màu đồ thị

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (67.3 KB, 4 trang )

1. Bài toán tô màu đồ thị:
2. #include <iostream>
3. #include <iomanip>
4. #include <fstream>
5. using namespace std;
6. #define MAX 100
7. int n,a[MAX][MAX+3];
8. void swap(int& a,int& b){
9. int tmp=a;
10. a=b;
11. b=tmp;
12. }
13. void ToMau(){
14. for(int i=1;i<n;i++){
15. for(int j=i+1;j<=n;j++){
16. if(a[j][n+1]>a[i][n+1]){
17. swap(a[i][n+1],a[j][n+1]);
18. swap(a[i][n+2],a[j][n+2]);
19. }
20. }
21. }
22. int mau=0;
23. int pop;
24. for(int i=1;!pop || i==1;i++){
25. int j;
26. for(j=1;j<=n;j++) if (!a[j][n+3]) break;
27. a[j][n+3]=++mau;
28. for(int k=j+1;k<=n;k++){
29. int dem=0;
30. for(int l=1;l<=n;l++){
31. if (a[a[k][n+2]][l]){


32. int kt=1;
33. for(int m=1;m<=n;m++){
34. if(a<IMG border=0 src="images/nhom/smod.gif"><FONT co
lor=violet><B>quangiahopan</B></FONT>[n+2]==l && a<IMG border=0 src="images/nhom/smo
d.gif"><FONT color=violet><B>quangiahopan</B></FONT>[n+3]==mau) kt=0;
35. }
36. if(kt) dem++;
37. }
38. }
39. if(dem==a[k][n+1] && !a[k][n+3]) a[k][n+3]=mau;
40. }
41. pop=1;
42. for(int i=1;i<=n;i++){
43. pop*=a[i][n+3];
44. }
45. }
46. }
47. int main(){
48. ifstream filein("D:\\baitap.txt");
49. filein>>n;
50. for(int i=1;i<=n;i++){
51. int sum=0;
52. for(int j=1;j<=n;j++){
53. filein>>a[i][j];
54. sum+=a[i][j];
55. }
56. a[i][n+1]=sum;
57. a[i][n+2]=i;
58. a[i][n+3]=0;
59. }

60.
61. ToMau();
62.
63. cout<<"/XXX/";
64. for(int i=1;i<=n+3;i++){
65. cout<<setw(5)<<i;
66. }
67. cout<<endl;
68. for(int i=1;i<=n;i++){
69. cout<<setw(5)<<i;
70. for(int j=1;j<=n+3;j++){
71. cout<<setw(5)<<a[i][j];
72. }
73. cout<<endl;
74. }
75. }
Thuật toán Depth First Search với ngăn xếp
1. #include <iostream>
2. #include <iomanip>
3. #include <fstream>
4. #include <stack>
5. using namespace std;
6. #define MAX 100
7. int n,a[MAX][MAX],chuaxet[MAX];
8. void DepthFirstSearch(int v){
9. stack<int> q;
10. q.push(v);
11. chuaxet[v]=0;
12. do{
13. int u=q.top();

14. q.pop();
15. cout<<u<<" ";
16. for(int i=1;i<=n;i++){
17. if(aKhách[i] && chuaxet[i]){//phan tu hang u, cot i
18. q.push(i);
19. chuaxet[i]=0;
20. }
21. }
22. }while(!q.empty());
23.
24. }
25. int main(){
26. ifstream filein("D:\\baitap.txt");
27. filein>>n;
28. for(int i=1;i<=n;i++){
29. for(int j=1;j<=n;j++){
30. filein>>a[i][j];
31. }
32. }
33. cout<<"/XXX/";
34. for(int i=1;i<=n;i++){
35. cout<<setw(5)<<i;
36. chuaxet[i]=1;
37. }
38. cout<<endl;
39. for(int i=1;i<=n;i++){
40. cout<<setw(5)<<i;
41. for(int j=1;j<=n;j++){
42. cout<<setw(5)<<a[i][j];
43. }

44. cout<<endl;
45. }
46. cout<<endl<<"Duyet DFS:"<<endl;
47. for(int i=1;i<=n;i++){
48. if(chuaxet[i]) DepthFirstSearch(i);
49. }
50. }
b) Lý thuyết đồ thị Euler:
1. using System;
2. using System.Collections.Generic;
3. using System.Linq;
4. using System.Text;
5. using System.IO;
6. namespace VD1
7. {
8. class Program
9. {
10. public const int MAX = 100;
11. static void Main(string[] args)
12. {
13. //Doc du lieu va chuan bi so lieu
14. StreamReader objReader = new StreamReader("D:\\baitap.txt");
15. int n = int .Parse(objReader.ReadLine());
16. string[] arrChuoi = new string[MAX];
17. int[,] arrSo = new int[MAX, MAX];
18. int[,] arrSoV = new int[MAX, MAX];
19. int[] Deg = new int[MAX];
20. int[] DegV = new int[MAX];
21. string textLine = "";
22. int i, j, VecM = 0;

23. int sc = 0;
24. for (i = 0; i < n; i++)
25. {
26. textLine = objReader.ReadLine() + "\r\n";
27. arrChuoi = textLine.Split(' ');
28. int sum = 0;
29. for (j = 0; j < n; j++)
30. {
31. arrSo[i, j] = int.Parse(arrChuoi[j]);
32. arrSoV[i, j] = arrSo[i, j];
33. sum += arrSo[i, j];
34. }
35. Deg[i] = sum;
36. DegV[i] = sum;
37. sc += sum;
38. if (Deg[i] > Deg[VecM]) VecM = i;
39. }
40. sc = sc / 2;
41. objReader.Close();
42. //In du lieu da doc duoc
43. Console.Write(" ");
44. for (i = 0; i < n; i++) Console.Write((i + 1) + " ");
45. Console.WriteLine();
46. for (i = 0; i < n; i++)
47. {
48. Console.Write((i + 1) + " ");
49. for (j = 0; j < n; j++) Console.Write(arrSo[i, j] + " ");
50. Console.WriteLine();
51. }
52. //Di thoi

53. Console.Write(VecM + " ");
54. int Vec = VecM;
55. for (i = 0; i < sc; i++)
56. {
57. int DegG=0;
58. int Good = 0;
59. for (j = 0; j < n; j++)
60. if (arrSoV[Vec, j] == 1)
61. {
62. DegG = DegV[j];
63. Good = j;
64. break;
65. }
66. for (j = 0; j < n; j++)
67. if (arrSoV[Vec, j] == 1 && DegV[j] > DegG)
68. {
69. DegG = DegV[j];
70. Good = j;
71. }
72. // Tranh dinh xuat phat, ket thuc
73. if (Good == VecM)
74. for (j = 0; j < n; j++)
75. if (arrSoV[Vec, j] == 1 && DegV[j] == DegV[Good] && j!=Good)

76. Good = j;
77. Console.Write(Good + " ");
78. DegV[Good] ;
79. DegV[Vec] ;
80. arrSoV[Vec, Good] = 0;
81. Vec = Good;

82. }
83. Console.Write(VecM + " ");
84. Console.ReadKey();
85. }
86. }
87. }

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×