-
个人简介
高精度加法 1.读入数据:将两个大整数以字符串形式读入,并且逆序存储到两个整数类型的数组 2.初始化结果数组,进位设置设置为0 3.逐位相加:从最低位开始,逐位将两个数相加,并加上前一位的进位,将 和的个位保留,存到结果数组,并且将和的十位保留下来 4.处理最高位进位:如果最后一位相加任然有进位,结果数组被填满,不需要去除前 导反之,没有产生进位需要去除 5.去除前导0 6.输出结果(逆序输出)
/* //深度优先 void dfs(参数){ if(终止条件){ 存放结果 return; } for(选择:本层集合元素){ 处理节点 递归 回溯 } } 广度: 方向数组 状态数组 void bfs(参数){ queue<结构体> q; // 队列 起点入队 状态已经走过 while(队列不为空){ 取队首元素,出队 遍历这个点的方向 for(int i = 0;i<4/8;i++){ int nextx = curx + 预探索方向x int nexty = cury + 预探索方向y if(越界处理){ 把预探索得点入队 更新状态(已经走过) } } } } */ #include <bits/stdc++.h> using namespace std; // 定义图的邻接矩阵表示 typedef vector<vector<int>> Graph; // Prim 算法实现 int primMST(const Graph& graph) { int V = graph.size(); // 存储每个顶点的最小权值 vector<int> key(V, INT_MAX); // 存储最小生成树中每个顶点的父节点 vector<int> parent(V, -1); // 标记顶点是否已包含在最小生成树中 vector<bool> mstSet(V, false); // 从顶点 0 开始 key[0] = 0; for (int count = 0; count < V - 1; ++count) { // 找到未包含在最小生成树中的最小权值顶点 int minKey = INT_MAX, minIndex; for (int v = 0; v < V; ++v) { if (!mstSet[v] && key[v] < minKey) { minKey = key[v]; minIndex = v; } } // 将找到的顶点加入最小生成树 mstSet[minIndex] = true; // 更新与该顶点相邻的顶点的权值 for (int v = 0; v < V; ++v) { if (graph[minIndex][v] && !mstSet[v] && graph[minIndex][v] < key[v]) { parent[v] = minIndex; key[v] = graph[minIndex][v]; } } } // 计算最小生成树的总权值 int totalWeight = 0; for (int i = 1; i < V; ++i) { totalWeight += graph[i][parent[i]]; } return totalWeight; } int main() { int V; cin >> V; Graph graph(V, vector<int>(V)); for (int i = 0; i < V; ++i) { for (int j = 0; j < V; ++j) { cin >> graph[i][j]; } } int result = primMST(graph); cout << result << endl; return 0; }
-
通过的题目
-
最近活动
题目标签
- 一本通编程启蒙
- 70
- 顺序结构
- 57
- 来源
- 46
- 小学生C++趣味编程
- 46
- 基础语法
- 38
- 分支结构
- 20
- 循环结构
- 15
- 力扣
- 13
- 字符串
- 10
- 结构体
- 8
- 函数
- 7
- 动态规划
- 4
- 搜索
- 3
- 排序
- 3
- STL
- 3
- DFS
- 2
- 数组
- 2
- 2
- 前缀和
- 2
- 十进制与二进制转换
- 2