一本通 3.4.5 最小生成树

news2024/10/3 17:00:53

1348:【例4-9】城市公交网建设问题

【题目描述】

有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使得工程的总造价最少?

【题目分析】

最小生成树模板题,Kruskal算法和Prim算法均可以

【代码实现】

Prim算法

#include<bits/stdc++.h>
using namespace std;

struct node {
	int from;
	int to;
	int dis;
	friend bool operator<(node a, node b) {
		return a.dis >= b.dis;
	}
};
vector<node> edge[105];
priority_queue<node> que;
bool vis[105];
int main() {
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int x, y, w;
		cin >> x >> y >> w;
		edge[x].push_back({x, y, w});
		edge[y].push_back({y, x, w});
	}
	//init priority_queue
	vis[1] = 1;
	for (auto e : edge[1]) {
		que.push(e);
	}
	//loop resolve
	while (!que.empty()) {
		node a = que.top();
		que.pop();
		if (!vis[a.to]) {
			vis[a.to] = 1;
			cout << a.from << " " << a.to << endl;
			for (auto e : edge[a.to]){
				que.push(e);
			} 
		}
	}
	return 0;
}

Kruskal算法

#include<bits/stdc++.h>
using namespace std;

struct node {
	int from, to, dis;
};
bool cmp(node &a, node &b) {
	return a.dis < b.dis;
}
vector<node> edge;
int fa[105];

int find(int a) {
	return fa[a] == a ? a : fa[a] = find(fa[a]);
}
int main() {
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		fa[i] = i;
	}
	for (int i = 1; i <= m; i++) {
		int x, y, w;
		cin >> x >> y >> w;
		edge.push_back({x, y, w});
		edge.push_back({y, x, w});
	}

	sort(edge.begin(), edge.end(), cmp);

	for (auto e : edge) {
		int from = find(e.from);
		int to = find(e.to);
		if (from != to) {
			cout << e.from << " " << e.to << endl;
			fa[from] = to ;
		}
	}

	return 0;
}

1349:【例4-10】最优布线问题

【题目描述】

学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。

当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。

现在由你负责连接这些计算机,任务是使任意两台计算机都连通(不管是直接的或间接的)。

【题目分析】

最小生成树模板题,Kruskal算法和Prim算法均可

【代码实现】

Prim算法

#include <bits/stdc++.h>
#define MAXN 101
using namespace std;

const int inf = 0x3f3f3f3f;

bool vis[MAXN];
int dis[MAXN], e[MAXN][MAXN];
int ans = 0;
int n, m;

int main() {
	//input data
	//clock_t s = clock();
	//init
	cin >> n;

	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&e[i][j]);	
		}
	}

	for (int i = 0; i <= n; i++) {
		dis[i]=inf;
	}
	dis[1] = 0;
	for (int i = 1; i <= n; i++) {
		int k = 0;
		for (int j = 1; j <= n; j++) { //寻找与当前构造完的生成树最近的点
			if (vis[j]) continue;
			if (dis[j] < dis[k]) k = j;
		}

		ans += dis[k];
		vis[k] = true;
		for (int j = 1; j <= n; j++) { //更新其他点到生成树的距离
			if (e[k][j] < dis[j]) {
				dis[j] = e[k][j];
			}
		}
	}
	cout<<ans;
	//output time
	//cout <<endl<< clock() - s<<endl;
	return 0;
}

1350:【例4-11】最短网络(agrinet)

【题目描述】

农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。每两个农场间的距离不会超过100000100000。

【题目分析】

最小生成树模板题,Kruskal算法和Prim算法均可

【代码实现】

Prim算法

#include <bits/stdc++.h>
#define MAXN 101
using namespace std;

const int inf = 0x3f3f3f3f;

bool vis[MAXN];
int dis[MAXN], e[MAXN][MAXN];
int ans = 0;
int n, m;

int main() {
	cin >> n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&e[i][j]);	
		}
	}

	for (int i = 0; i <= n; i++) {
		dis[i]=inf;
	}
	
	dis[1] = 0;
	for (int i = 1; i <= n; i++) {
		int k = 0;
		for (int j = 1; j <= n; j++) { //寻找与当前构造完的生成树最近的点
			if (vis[j]) continue;
			if (dis[j] < dis[k]) k = j;
		}

		ans += dis[k];
		vis[k] = true;
		for (int j = 1; j <= n; j++) { //更新其他点到生成树的距离
			if (e[k][j] < dis[j]) {
				dis[j] = e[k][j];
			}
		}
	}
	cout<<ans;
	return 0;
}

1351:【例4-12】家谱树

【题目描述】

有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。

给出每个人的孩子的信息。

输出一个序列,使得每个人的后辈都比那个人后列出。

【题目分析】

拓扑排序模板题
方法1:移除入度为0的点,并将相邻点的入度减1,依次循环直到所有点都被输出
方法2:对所有的点进行深搜,在每个点返回时加入栈,搜索完成后依次弹出点

【代码实现】

方法1:

#include <bits/stdc++.h>

using namespace std;
const int maxn = 1001;
int n;
vector<int> p[maxn];
int indeg[maxn];
int vis[maxn];
queue<int> Q;
int main() {
	cin >> n ;
	for (int i = 1; i <= n; i++) {
		int x;
		while (cin >> x, x != 0) {
			p[i].push_back(x);
			indeg[x]++;
		}
	}
	for (int i = 1; i <= n; i++) { //找到起点
		if (indeg[i] == 0) Q.push(i);
	}
	while (!Q.empty()) {
		int u = Q.front();
		Q.pop();
		cout << u << " ";
		for (int i = 0; i < (int ) p[u].size(); i++) { //依次找后续节点
			if (--indeg[p[u][i]] == 0)
				Q.push(p[u][i]);
		}
	}
	return 0;
}

方法2: 

#include <bits/stdc++.h>

using namespace std;

vector<int> p[105];
stack<int> sta;
bool vis[105];
void dfs(int x) {

	for (auto e : p[x]) {
		if (vis[e]) continue;
		vis[e] = 1;
		dfs(e);
	}
	sta.push(x);
}
int main() {
	//input data
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		int x;
		while (cin >> x, x != 0) p[i].push_back(x);
	}

	for (int i = 1; i <= n; i++) {
		if (!vis[i]) vis[i] = 1, dfs(i);
	}

	while (!sta.empty())  cout << sta.top() << " ", sta.pop();
	return 0;
}

1391:局域网(net)

【题目描述】

某个局域网内有n(n≤100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成网络卡的现象。因为连接计算机的网线本身不同,所以有一些连线不是很畅通,我们用f(i,j)表示i,j之间连接的畅通程度(f(i,j)≤1000),f(i,j)值越小表示i,j之间连接越通畅,f(i,j)为00表示i,j之间无网线连接。现在我们需要解决回路问题,我们将除去一些连线,使得网络中没有回路,并且被除去网线的Σf(i,j)最大,请求出这个最大值。

【题目分析】

使得网络中没有回路,并且被除去网线的Σf(i,j)最大,即留下的网线可以生成一个最小生成树,将所有网线的权值相加减去最小生成树的权值,得到最大的移除权值。

算法实现:Kruskal算法或者Prim算法求解最小生成树的权值和

【代码实现】

#include <bits/stdc++.h>

using namespace std;
const int maxn = 1001;
struct Edges {
	int u;
	int v;
	int w;
} edge[maxn * 50];
inline bool cmp(const Edges &a, const Edges &b) {
	return a.w < b.w;
}

int n, m;
int father[maxn];
int find(int x) {
	if (father[x] != x)
		father[x] = find(father[x]);
	return father[x];
}
int ans = 0;
int main() {
	//input data
	//clock_t s = clock();
	int sum = 0;
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		cin >> edge[i].u >> edge[i].v >> edge[i].w;
		sum += edge[i].w;
	}

	sort(edge + 1, edge + m + 1, cmp);
	for (int i = 1; i <= n; i++) {
		father[i] = i;
	}
	int _count = 0;
	for (int i = 1; i <= m; i++) {
		int fa_u = find(edge[i].u);
		int fa_v = find(edge[i].v);
		if (fa_u != fa_v) {
			ans += edge[i].w;
			father[fa_u] = fa_v;
			_count++;
			if (_count >= n - 1) break;
		}

	}
	cout << sum - ans;
	//output time
	//cout <<endl<< clock() - s<<endl;
	return 0;
}

1392:繁忙的都市(city)

【题目描述】

城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接。这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了。每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造。但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求:

1.改造的那些道路能够把所有的交叉路口直接或间接的连通起来。

2.在满足要求1的情况下,改造的道路尽量少。

3.在满足要求1、2的情况下,改造的那些道路中分值最大值尽量小。

作为市规划局的你,应当作出最佳的决策,选择那些道路应当被修建。

【题目分析】

根据题意:将所有交叉路口直接或间接的连接起来,并使得所有路口的分值之和最小,就是求连接所有交叉路口的最小生成树。

算法实现:Kruskal算法或者Prim算法求解最小生成树的权值和

【代码实现】

#include <bits/stdc++.h>

using namespace std;
const int maxn = 1001;
struct Edges {
	int u;
	int v;
	int w;
} edge[maxn * 50];
inline bool cmp(const Edges &a, const Edges &b) {
	return a.w < b.w;
}

int n, m;
int father[maxn];
int find(int x) {
	if (father[x] != x)
		father[x] = find(father[x]);
	return father[x];
}
int ans = 0;
int main() {
	//input data
	//clock_t s = clock();
	int sum = 0;
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		cin >> edge[i].u >> edge[i].v >> edge[i].w;
		sum += edge[i].w;
	}

	sort(edge + 1, edge + m + 1, cmp);
	for (int i = 1; i <= n; i++) {
		father[i] = i;
	}
	int maxw = 0;
	int _count = 0;
	for (int i = 1; i <= m; i++) {
		int fa_u = find(edge[i].u);
		int fa_v = find(edge[i].v);
		if (fa_u != fa_v) {
			maxw = max(maxw, edge[i].w);
			father[fa_u] = fa_v;
			_count++;
			if (_count >= n - 1) break;
		}

	}
	cout << n - 1 << " " << maxw;
	return 0;
}

1393:联络员(liaison)

【题目描述】

Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员两两都可以联络(直接或者是间接都可以)。Tyvj是一个公益性的网站,没有过多的利润,所以你要尽可能的使费用少才可以。

目前你已经知道,Tyvj的通信渠道分为两大类,一类是必选通信渠道,无论价格多少,你都需要把所有的都选择上;还有一类是选择性的通信渠道,你可以从中挑选一些作为最终管理员联络的通信渠道。数据保证给出的通行渠道可以让所有的管理员联通。

【题目分析】

必选的通信渠道相加,将连接点进行并查集合并,对可选的通讯渠道排序,依次选择可选渠道使得所有点连通,Kruskal算法思想

【代码实现】

#include <bits/stdc++.h>

using namespace std;
const int maxn = 2005;
struct Edges {
	int u;
	int v;
	int w;
} edge[maxn * 50];
inline bool cmp(const Edges &a, const Edges &b) {
	return a.w < b.w;
}

int n, m;
int father[maxn];
int find(int x) {
	if (father[x] != x)
		father[x] = find(father[x]);
	return father[x];
}
int ans = 0;
int main() {
	//input data
	cin >> n >> m;
	int index = 0;
	int _count = 0;
	for (int i = 1; i <= n; i++) {  //init bing cha ji
		father[i] = i;
	}
	for (int i = 1; i <= m; i++) {
		int x, y, q, w;
		cin >> q >> x >> y >> w;
		if (q == 1) {          //direct solve
			ans += w;
			int fa_x = find(x);
			int fa_y = find(y);
			if (fa_x != fa_y) {
				father[fa_y] = fa_x;
				_count++;
			}
		}
		if (q == 2) {          //save data
			edge[++index].u = x;
			edge[index].v = y;
			edge[index].w = w;
		}

	}
	//sort and add edges
	sort(edge + 1, edge + index + 1, cmp);
	for (int i = 1; i <= index; i++) {
//		cout << edge[i].w << " ";
		int fa_u = find(edge[i].u);
		int fa_v = find(edge[i].v);
		if (fa_u != fa_v) {
			ans += edge[i].w;
			father[fa_v] = fa_u;
			_count++;
			if (_count >= n - 1) break;
		}

	}
	//cout answers
	cout << ans;
	return 0;
}

1394:连接格点(grid)

【题目描述】

有一个M行N列的点阵,相邻两点可以相连。一条纵向的连线花费一个单位,一条横向的连线花费两个单位。某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通。

【题目分析】

根据已经相连的线,将线的两端点进行并查集合并,枚举竖边将端点并查集合并,费用加1,枚举横边将端点并查集合并,费用加2,输出结果  Kruskal算法思想

【代码实现】

 

#include <bits/stdc++.h>

using namespace std;

struct node {
	int x, y;
};
node fa[1005][1005];

node find(node a) {
	if (a.x == fa[a.x][a.y].x && a.y == fa[a.x][a.y].y) return a;
	return fa[a.x][a.y] = find(fa[a.x][a.y]);
}
bool merge(node a, node b) {
	node fa_a = find(a);
	node fa_b = find(b);
	if (fa_a.x != fa_b.x || fa_a.y != fa_b.y) {
		fa[fa_a.x][fa_a.y] = fa_b;
		return true;
	}
	return false;
}
int main() {
	//input data
	int m, n;
	cin >> m >> n;
	for (int i = 1; i <= m; i++) {
		for (int j = 1; j <= n; j++) {
			fa[i][j] = {i, j};
		}
	}

	int sx, sy, fx, fy;
	while (cin >> sx >> sy >> fx >> fy) {
		merge({sx, sy}, {fx, fy});
	}

	int sum = 0;
	//先枚举竖边
	for (int i = 1; i < m; i++) {
		for (int j = 1; j <= n; j++) {
			if (merge({i, j}, {i + 1, j})) sum++;
		}
	}
	//再枚举横边
	for (int i = 1; i <= m; i++) {
		for (int j = 1; j < n; j++) {
			if (merge({i, j}, {i, j + 1})) sum += 2;
		}
	}
	cout << sum << endl;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Server基础 第四章 select定制查询(select中的各种查询筛选条件)

本章主要介绍 select 语句查询数据的基本用法&#xff0c;其中包括查询指定字段信息、条件查询等。 目录 1、比较运算符、逻辑运算符 &#xff08;1&#xff09;查询phone大于500且不是单县的 &#xff08;2&#xff09;查询地址为烟台或者单县但是phone要大于666的 &#…

IMX6ull 之 HelloWorld Led点灯

一 GPIO点灯&#xff0c;嵌入式的helloworld 1 何为GPIO&#xff1f; GPIO只是一个CPU内提供的一种功能外设&#xff0c;CPU外部的I/O引脚会被赋予一种功能&#xff08;GPIO、UART、I2C等&#xff09;&#xff1b;该功能由CPU内外设提供&#xff0c;具体是什么功能由IOMUX…

刷题笔记4-22

目录 1.Java&#xff1a;(a,b)>Math.abs(a-3)-Math.abs(b-3)&#xff1b; 2.字符解释 3.C语言二维数组中a[i]表示ai的地址&#xff0c;而a[i]又可以表示为*&#xff08;ai&#xff09; 4.二维数组在传参时&#xff0c;必须给定列 5.软件开发&#xff1a;观察者模式 6.建…

shell脚本控制

shell脚本编程系列 处理信号 Linux利用信号与系统中的进程进行通信&#xff0c;通过对脚本进行编程&#xff0c;使其在收到特定信号时执行某些命令&#xff0c;从而控制shell脚本的操作。 Linux信号 shell脚本编程会遇到的最常见的Linux系统信号如下表所示&#xff1a; 在默…

【ros】6.ros激光雷达SLAM(建图定位)

百行业为先 &#xff0c;万恶懒为首。——梁启超 文章目录 :smirk:1. 激光SLAM:blush:2. 二维激光SLAM:satisfied:3. 三维激光SLAM &#x1f60f;1. 激光SLAM SLAM&#xff08;同步定位与地图构建&#xff09;是一种机器人感知技术&#xff0c;用于在未知环境中同时确定机器人…

java调用webservicer的方法

对于使用 Webservicer的方式&#xff0c;一般采用 Java API调用的方式。Webservicer是一个运行在浏览器中的客户端程序&#xff0c;它可以通过 Webservicer的接口来访问服务器上的服务。 使用 Java调用 Webservicer有两种方式&#xff1a; 下面是一个简单的例子&#xff1a; 2、…

零基础,零成本,部署一个属于你的大模型

前言 看了那么多chatGPT的文章&#xff0c;作为一名不精通算法的开发&#xff0c;也对大模型心痒痒。但想要部署自己的大模型&#xff0c;且不说没有算法相关的经验了&#xff0c;光是大模型占用的算力资源&#xff0c;手头的个人电脑其实也很难独立部署。就算使用算法压缩后的…

数据结构和算法学习记录——小习题-二叉树的遍历二叉搜索树

目录 二叉树的遍历 1-1 1-2 1-3 二叉搜索树 2-1 2-2 2-3 2-4 答案区 二叉树的遍历 1-1 假定只有四个结点A、B、C、D的二叉树&#xff0c;其前序遍历序列为ABCD&#xff0c;则下面哪个序列是不可能的中序遍历序列&#xff1f; .ABCD .ACDB .DCBA .DABC 1-2 对于…

最精简:windows环境安装tensorflow-gpu-2.10.1

Tensorflow 2.10是最后一个在本地windows上支持GPU的版本 1. 通过.whl文件方式安装2.创建anaconda虚拟环境3.安装对应的cuda与cudnn版本&#xff0c;local不必装cuda和cudnn4. 测试tensorflow gpu是否可用 1. 通过.whl文件方式安装 .whl文件的下载地址&#xff1a; tensorflow…

windows下使用vite创建vue项目

windows下使用vite创建vue项目 1 下载安装配置NodeJS1.1 下载1.2 安装1.3 配置1.4 npm镜像加速配置1.6 设置环境变量 2 Vite简单介绍3 Vite创建vue项目3.1 vite创建vue项目的命令3.2 vite创建vue项目步骤 1 下载安装配置NodeJS 1.1 下载 下载地址&#xff1a;https://nodejs.…

全注解下的SpringIoc 续2-bean的生命周期

spring中bean的生命周期 上一个小节梳理了一下Spring Boot的依赖注入的基本知识&#xff0c;今天来梳理一下spring中bean的生命周期。 下面&#xff0c;让我们一起看看bean在IOC容器中是怎么被创建和销毁的。 bean的生命周期大致分为四个部分&#xff1a; #mermaid-svg-GFXNEU…

数据分类分级 数据识别-识别日期类型数据

前面针对数据安全-数据分类分级方案设计做了分析讲解,具体内容可点击数据安全-数据分类分级方案设计,不再做赘述 上面图片是AI创作生成!如需咒语可私戳哦! 目录 前言需求日期格式代码日期类型数据对应正则表达式前言 要做数据分类分级,重要的是分类分级模版的合理性和数…

一致性 Hash 算法 及Java TreeMap 实现

1、一致性 Hash 算法原理 一致性 Hash 算法通过构建环状的 Hash 空间替线性 Hash 空间的方法解决了这个问题&#xff0c;整个 Hash 空间被构建成一个首位相接的环。 其具体的构造过程为&#xff1a; 先构造一个长度为 2^32 的一致性 Hash 环计算每个缓存服务器的 Hash 值&…

「C/C++」C++对已有的类进行扩充

博客主页&#xff1a;何曾参静谧的博客 文章专栏&#xff1a;「C/C」C/C学习 目录 相关术语一、 继承二、组合 相关术语 继承&#xff1a;继承父类后可以拥有父类对应的属性和方法。 组合&#xff1a;将类作为成员对象&#xff0c;基类可以直接调用派生类对应的属性和方法。 一…

MySQL_第08章_聚合函数

第08章_聚合函数 讲师&#xff1a;尚硅谷 - 宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a; http://www.atguigu.com 我们上一章讲到了 SQL 单行函数。实际上 SQL 函数还有一类&#xff0c;叫做聚合&#xff08;或聚集、分组&#xff09;函…

59 openEuler 22.03-LTS 搭建MySQL数据库服务器-软件介绍和配置环境

文章目录 59 openEuler 22.03-LTS 搭建MySQL数据库服务器-软件介绍和配置环境59.1 软件介绍59.2 配置环境59.2.1 关闭防火墙并取消开机自启动59.2.2 修改SELINUX为disabled59.2.3 创建组和用户59.2.4 创建数据盘59.2.4.1 方法一&#xff1a;在root权限下使用fdisk进行磁盘管理5…

JVM笔记 —— 垃圾回收(GC)详解

一、垃圾回收的分类 针对HotSpot JVM的实现&#xff0c;它里面的GC其实准确分类只有两大种: Partial GC&#xff1a;部分收集模式 Young GC&#xff1a;只收集年轻代的GCOld GC&#xff1a;只收集老年代的GC。只有CMS中有这个模式。Mixed GC&#xff1a;收集整个年轻代以及部分…

mybatis的基本使用和理解

mybatis的基本使用和理解 Lombok的使用(使用注解的方式将实体类中的get、set、构造函数代替&#xff09; Lombok是一个Java库&#xff0c;能自动插入编辑器并且构建工具&#xff0c;简化Java开发。通过添加注解的方式&#xff0c;不需要为类编写getter或equals方法&#xff0…

Vue3 + TS4.8踩坑之配置husky问题env: sh\r: No such file or directory

一、基本情况&#xff1a; 硬件环境&#xff1a;MacOS 10.14.6 背景&#xff1a;用vue3官方npm init vuelatest初始化创建的vue3 ts4.8项目。 二、问题和解决方案&#xff1a; 问题1&#xff1a;git commit的时候提示&#xff1a;env: sh\r: No such file or directory 原…

0121 进程管理

1.在Linux中&#xff0c;每个执行的程序都称为一个进程。每一个进程都分配一个ID号&#xff08;pid进程号&#xff09; 2.每个进程都可能以两种方式存在&#xff0c;前台和后台。前台进程即用户当前屏幕上可进行的操作&#xff0c;后台进程即实际操作&#xff0c;由于屏幕上无…