楼主: Lisrelchen
1138 2

[Case Study]Depth-First-Search using C [推广有奖]

  • 0关注
  • 62粉丝

VIP

已卖:4192份资源

院士

67%

还不是VIP/贵宾

-

TA的文库  其他...

Bayesian NewOccidental

Spatial Data Analysis

东西方数据挖掘

威望
0
论坛币
50278 个
通用积分
83.5106
学术水平
253 点
热心指数
300 点
信用等级
208 点
经验
41518 点
帖子
3256
精华
14
在线时间
766 小时
注册时间
2006-5-4
最后登录
2022-11-6

楼主
Lisrelchen 发表于 2015-11-26 09:35:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

DFS(Depth-First-Search)深度优先搜索算法是图的遍历算法中非常常见的一类算法。分享给大家供大家参考。具体方法如下:
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <iterator>

  4. using namespace std;  

  5. #define MAX_VERTEX_NUM 10

  6. struct Node
  7. {
  8. int adjvex;
  9. struct Node *next;
  10. int info;
  11. };

  12. typedef struct VNode
  13. {
  14. char data;
  15. Node *first;
  16. }VNode, AdjList[MAX_VERTEX_NUM];

  17. struct Graph
  18. {
  19. AdjList vertices;
  20. int vexnum, arcnum;
  21. };

  22. int visited[MAX_VERTEX_NUM];

  23. int locateVex(Graph G, char u)
  24. {
  25. int i;
  26. for (i = 0; i < G.vexnum; i++)
  27. {
  28. if (u == G.vertices[i].data)
  29.   return i;
  30. }

  31. if (i == G.vexnum)
  32. {
  33. printf("Error u!\n");
  34. exit(1);
  35. }

  36. return 0;
  37. }

  38. void createGraph(Graph &G)
  39. {
  40. int i, j, k, w;
  41. char v1, v2, enter;

  42. Node *p;
  43. printf("input vexnum & arcnum:\n");
  44. scanf("%d", &G.vexnum);
  45. scanf("%d", &G.arcnum);
  46. printf("input vertices:\n");
  47. for (i = 0; i < G.vexnum; i++)
  48. {
  49. scanf("%c%c", &enter, &G.vertices[i].data);
  50. G.vertices[i].first = NULL;
  51. }

  52. printf("input Arcs(v1, v2, w):\n");
  53. for (k = 0; k < G.arcnum; k++)
  54. {
  55. scanf("%c%c", &enter, &v1);
  56. scanf("%c%c", &enter, &v2);
  57. scanf("%d", &w);
  58. i = locateVex(G, v1);
  59. j = locateVex(G, v2);
  60. p = (Node *)malloc(sizeof(Node));
  61. p->adjvex = j;
  62. p->info = w;
  63. p->next = G.vertices[i].first;
  64. G.vertices[i].first = p;
  65. }
  66. }

  67. void DFS(Graph &G, int v)
  68. {
  69. Node *p;
  70. printf("%c", G.vertices[v].data);
  71. visited[v] = 1;
  72. p = G.vertices[v].first;

  73. while (p)
  74. {
  75. if (!visited[p->adjvex])
  76.   DFS(G, p->adjvex);
  77. p = p->next;
  78. }
  79. }

  80. void DFSTranverse(Graph &G)
  81. {
  82. for (int v = 0; v < G.vexnum; v++)
  83. visited[v] = 0;
  84. for (int v = 0; v < G.vexnum; v++)
  85. {
  86. if (!visited[v])
  87.   DFS(G, v);
  88. }
  89. }

  90. int main()
  91. {
  92. Graph G;
  93. createGraph(G);
  94. DFSTranverse(G);
  95. }
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Case study search Using First study include

沙发
Lisrelchen 发表于 2015-11-26 09:35:35
  1. #include <iostream>
  2. #include <string>

  3. using namespace std;

  4. #define MAXLEN 10

  5. struct Node
  6. {
  7. int data;
  8. Node *next;
  9. };

  10. struct Link
  11. {
  12. int count;
  13. string name;
  14. Node *head;
  15. };

  16. struct Graph
  17. {
  18. Link link[MAXLEN];
  19. int vexnum;
  20. int arcnum;
  21. };

  22. int findIndex(Graph &G, string name)
  23. {
  24. int index = -1;

  25. for (int i = 0; i < G.vexnum; i++)
  26. {
  27. if (G.link[i].name == name)
  28. {
  29.   index = i;
  30.   break;
  31. }
  32. }

  33. if (index == -1)
  34. cout << "error" << endl;
  35.   
  36. return index;
  37. }

  38. void constructGraph(Graph &G)
  39. {
  40. cout << "construct graph yooo" << endl;
  41. cout << "enter vexnum" << endl;
  42. cin >> G.vexnum;

  43. string array[] = {"v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8"};
  44. const int size = sizeof array / sizeof *array;

  45. for (int i = 0; i < G.vexnum; i++)
  46. {
  47. G.link[i].name = array[i];
  48. G.link[i].head = NULL;
  49. }

  50. string leftName;
  51. string rightName;

  52. cout << "enter a pair" << endl;
  53. cin >> leftName >> rightName;
  54. while (leftName != "end" && rightName != "end")
  55. {
  56. int leftIndex = findIndex(G, leftName);
  57. int rightIndex = findIndex(G, rightName);

  58. Node *node = new Node;
  59. node->data = rightIndex;
  60. node->next = NULL;

  61. node->next = G.link[leftIndex].head;
  62. G.link[leftIndex].head = node;

  63. cout << "enter a pair" << endl;
  64. cin >> leftName >> rightName;
  65. }
  66. }

  67. bool flag[MAXLEN];

  68. void DFSTranverse(Graph &G, int num)
  69. {
  70. cout << G.link[num].name << " ";
  71. flag[num] = true;

  72. Node *head = G.link[num].head;
  73. while (head != NULL)
  74. {
  75. int index = head->data;
  76. if (!flag[index])
  77.   DFSTranverse(G, index);
  78. head = head->next;
  79. }
  80. }

  81. void main()
  82. {
  83. Graph G;
  84. constructGraph(G);
  85. for (int i = 0; i < MAXLEN; i++)
  86. flag[i] = false;
  87. DFSTranverse(G, 0);
  88. }
复制代码

藤椅
Lisrelchen 发表于 2015-11-26 09:36:45
  1. DFS的迭代遍历算法如下:

  2. void DFS(Graph &G)
  3. {
  4. stack<int> istack;
  5. istack.push(0);

  6. cout << G.link[0].name << " ";
  7. flag[0] = true;

  8. while (!istack.empty())
  9. {
  10. int index = istack.top();
  11. Node *head = G.link[index].head;

  12. while (head != NULL && flag[head->data] == true)
  13.   head = head->next;

  14. if (head != NULL)
  15. {
  16.   index = head->data;
  17.   if (!flag[index])
  18.   {
  19.   cout << G.link[index].name << " ";
  20.   flag[index] = true;
  21.   istack.push(index);
  22.   }
  23. }
  24. else
  25.   istack.pop();
  26. }
  27. }
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-9 05:58