1599 - Ideal Path

紫书上面已经给出了很好的思路,首先从终点开始进行BFS,同时记录从终点开始到每个节点的最短路径的长度,这样一直到起点,然后从起点开始进行新的一轮的BFS,在新的一轮的BFS中,我们要记录所走路径的颜色信息,每次选择颜色最小的那一条路来走,同时要注意,如果从当前的节点开始有多条颜色最小的路径,那么我们要将相应节点的编号都要存到队列当中,在下一轮的时候依次出队列分别进行下一轮的比较,保证所走的路径的颜色值是字典序最小的,具体实现见如下源代码:

#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<sstream>
using namespace std;

int n, m;

void bfs1(vector<int>& distance,vector<vector<int>>& point){
	distance[n] = 0;
	queue<int> q;
	q.push(n);
	while (!q.empty()){
		int t = q.front();
		q.pop();
		for (int i = 0; i < point[t].size(); i++){
			int next = point[t][i];
			if (distance[next] == -1){
				distance[next] = distance[t] + 1;
				q.push(next);
				if (next == 1) return;
			}
		}
	}
}

void bfs2(vector<vector<int>>& point,vector<vector<int>>& color,
	vector<int>& distance,vector<int>& ans,vector<bool>& visit){
	
	queue<int> q;
	q.push(1);
	while (!q.empty()){
		int t = q.front();
		if (t == n) return;
		q.pop();
		int min_color = 2147483647;
		for (int i = 0; i < point[t].size(); i++){
			int cur = point[t][i];
			if (distance[t] == distance[cur] + 1 && min_color > color[t][i]) 
				min_color = color[t][i];
		}
		if (ans[distance[t]] == 0 || ans[distance[t]] >= min_color) ans[distance[t]] = min_color;
		else continue;
		for (int i = 0; i < point[t].size(); i++){
			int cur = point[t][i];
			if (distance[t] == distance[cur] + 1 && min_color == color[t][i] && !visit[cur]) {
				q.push(cur); visit[cur]=true;
			}
		}
	}

}

int main(){
	
	while (cin >> n >> m){
		vector<vector<int>> point(n+1,vector<int>());
		vector<vector<int>> color(n+1,vector<int>());
		for (int i = 0; i < m; i++){
			int a, b, c;
			cin >> a >> b >> c;
			point[a].push_back(b);
			point[b].push_back(a);
			color[a].push_back(c);
			color[b].push_back(c);
		}
		vector<bool> visit(n + 1, false);
		vector<int> distance(n+1,-1);
		bfs1(distance, point);
		vector<int> ans(distance[1]+1,0);
		bfs2(point, color, distance, ans, visit);
		int i = distance[1];
		cout << distance[1] << endl;
		while (true){
			cout << ans[i];
			i--;
			if (i == 0){
				cout << endl;
				break;
			}
			else{
				cout << " ";
			}
		}
	}
	return 0;
}

npm error code EPERM npm error syscall mkdir npm error path D:\ns\node_cache\_cacache\index-v5\ae\cb npm error errno -4048 npm error Error: EPERM: operation not permitted, mkdir 'D:\ns\node_cache\_cacache\index-v5\ae\cb' npm error at async mkdir (node:internal/fs/promises:857:10) npm error at async Object.insert (D:\ns\node_modules\npm\node_modules\cacache\lib\entry-index.js:124:5) npm error at async CacheEntry.store (D:\ns\node_modules\npm\node_modules\make-fetch-happen\lib\cache\entry.js:308:7) npm error at async fetch (D:\ns\node_modules\npm\node_modules\make-fetch-happen\lib\fetch.js:98:7) npm error at async RegistryFetcher.packument (D:\ns\node_modules\npm\node_modules\pacote\lib\registry.js:90:19) npm error at async RegistryFetcher.manifest (D:\ns\node_modules\npm\node_modules\pacote\lib\registry.js:128:23) npm error at async #fetchManifest (D:\ns\node_modules\npm\node_modules\@npmcli\arborist\lib\arborist\build-ideal-tree.js:1202:20) npm error at async #nodeFromEdge (D:\ns\node_modules\npm\node_modules\@npmcli\arborist\lib\arborist\build-ideal-tree.js:1040:19) npm error at async #buildDepStep (D:\ns\node_modules\npm\node_modules\@npmcli\arborist\lib\arborist\build-ideal-tree.js:904:11) npm error at async Arborist.buildIdealTree (D:\ns\node_modules\npm\node_modules\@npmcli\arborist\lib\arborist\build-ideal-tree.js:181:7) { npm error errno: -4048, npm error code: 'EPERM', npm error syscall: 'mkdir', npm error path: 'D:\\ns\\node_cache\\_cacache\\index-v5\\ae\\cb', npm error requiredBy: '.' npm error } npm error npm error The operation was rejected by your operating system. npm error It's possible that the file was already in use (by a text editor or antivirus), npm error or that you lack permissions to access it. npm error npm error If you believe this might be a permissions issue, please double-check the npm error permissions of the file and its containing directories, or try running npm error the command again
最新发布
04-03
<think>好的,用户遇到了npm执行时出现EPERM错误,具体是mkdir permission denied,需要解决方案。首先我要回忆一下相关的知识,看看之前处理类似问题的经验。 根据引用[1],用户之前解决EPERM错误的方法是修改nodejs安装目录的文件夹权限,给予当前用户完全控制。这可能是因为安装全局包时,npm需要写入系统目录,而权限不足导致的问题。同样,引用[3]提到安装全局包时如果没有权限在npm-global文件夹下写入,就会引发EPERM错误。所以,检查目标文件夹的权限是关键步骤。 另外,引用[2]中的错误是EACCES,也是权限问题,用户需要确保对相关目录有足够的权限。这可能涉及到更改文件夹的所有权或者使用管理员权限运行命令。有时候,使用sudo命令可以临时提升权限,但可能不是最佳实践,特别是在Linux或macOS系统中,正确的方式应该是调整文件夹权限或者使用nvm来管理Node.js,避免系统目录的权限问题。 接下来,我需要整理出具体的解决步骤。首先,确认错误发生的具体路径,用户应该根据错误提示找到无法访问的文件夹,然后修改该文件夹的权限。比如,在Windows中,右键属性-安全-编辑,添加用户并赋予完全控制权限。在macOS或Linux,可能需要使用chmod或chown命令。 另外,建议用户避免全局安装到系统目录,而是配置npm使用有权限的目录。比如,在用户目录下创建.npm-global,并设置环境变量,这样可以避免权限问题。此外,使用nvm管理Node.js版本也是一个好方法,因为它将环境安装在用户目录下,不需要系统权限。 还要注意,有时候清理npm缓存或者修复node.js安装也能解决问题。如果问题依然存在,可能需要以管理员身份运行命令行,但长期来说,调整权限或配置更合适的安装路径更好。 最后,需要提醒用户检查防病毒或安全软件是否阻止了npm的操作,有时候这些软件会错误地拦截合法的文件操作。 总结下来,解决方案包括检查权限、修改文件夹权限、配置npm使用用户目录、使用nvm、清理缓存以及检查安全软件等步骤。确保每个步骤清晰,用户能够逐步操作解决问题。</think>针对npm执行时出现`EPERM error mkdir permission denied`的问题,以下是系统化的解决方案: --- ### **1. 检查错误路径权限** 错误通常指向**特定文件夹**因权限不足无法创建目录或写入文件。例如: - **Windows系统**:右键点击报错中提到的文件夹(如`node_modules`或`npm-global`) → 选择“属性” → “安全” → 编辑用户权限 → 勾选“完全控制” → 应用[^1][^3]。 - **macOS/Linux系统**:使用终端命令修改权限: ```bash sudo chmod -R 777 /path/to/folder # 开放读写执行权限 # 或更安全的方式:修改文件夹所有者 sudo chown -R $(whoami) /path/to/folder ``` --- ### **2. 避免使用系统级目录** 全局安装包时,默认路径可能需要管理员权限。**配置npm使用用户目录**: ```bash # 创建用户专属npm目录 mkdir ~/.npm-global npm config set prefix ~/.npm-global # 将路径添加到环境变量(Windows在系统设置中配置,macOS/Linux在~/.bashrc或~/.zshrc添加) export PATH=~/.npm-global/bin:$PATH ``` 此方法可绕过系统目录权限限制[^3]。 --- ### **3. 使用管理员权限运行命令行** 临时解决权限问题(仅建议紧急情况下使用): - **Windows**:右键点击命令行工具(CMD/PowerShell) → 选择“以管理员身份运行”。 - **macOS/Linux**:在命令前加`sudo`: ```bash sudo npm install -g package-name ``` --- ### **4. 使用nvm管理Node.js环境** 通过**nvm(Node Version Manager)**安装Node.js,避免系统目录权限冲突: 1. 安装nvm(详见[nvm官方文档](https://github.com/nvm-sh/nvm))。 2. 通过nvm安装Node.js: ```bash nvm install --lts nvm use --lts ``` nvm将环境安装在用户目录下,无需系统权限。 --- ### **5. 清理npm缓存** 缓存文件损坏可能导致权限错误: ```bash npm cache clean --force ``` --- ### **6. 检查防病毒/安全软件** 某些安全软件会阻止npm的文件操作。**临时禁用防火墙或杀毒软件**测试是否解决问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值