北邮OJ 301进程管理-网研14+文件系统的变体

在这里插入图片描述
本题主要是进行一个结构的化简(利用mark标记数组查询存在)和递归树的查找、删除,很有借鉴意义
同时,对文件系统的代码进行改编,查询目录以及所有子目录
AC代码

#include <bits/stdc++.h>

using namespace std;
int mark[105];
vector<int>graph[105];

void del(int x)//简单的DFS
{
	mark[x]=0;
	for(int i=0;i<graph[x].size();i++)
	{
		int u=graph[x][i];
		del(u);
	}
	return ;
}

int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		memset(graph,0,sizeof(graph));
		memset(mark,0,sizeof(mark));
		int n;
		scanf("%d",&n);
		mark[0]=1;
		for(int i=0;i<n;i++)
		{
			char buf[60];
			scanf("%s",buf);
			if(strcmp(buf,"FORK")==0)
			{
				int a,b;
				scanf("%d%d",&a,&b);
				graph[a].push_back(b);
				mark[b]=1;
			}
			if(strcmp(buf,"QUERY")==0)
			{
				int a;
				scanf("%d",&a);
				if(mark[a]==1) printf("Yes\n");
				else printf("No\n");
			}
			if(strcmp(buf,"KILL")==0)
			{
				int x;
				scanf("%d",&x);
				mark[x]=0;
				del(x); 
			}
		}
	}
	return 0;
}

下面仿照这个思路对文件系统那题进行改编

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

map<string,vector<string> >File;
map<string,vector<string> >Dir;

void DFS(string str)
{
	for(int i=0;i<Dir[str].size();i++)
	{
		printf("%s\n",Dir[str][i].c_str());
	}
	for(int i=0;i<Dir[str].size();i++)
	{
		DFS(Dir[str][i]);
	}
	return ;
}

int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		File.clear();//果然不能重复定义的!还是clear()! 
		Dir.clear();
		int n;
		scanf("%d",&n);
		for(int i=0;i<n;i++)
		{
			char buf[60];
			scanf("%s",buf);
			if(strcmp(buf,"CREATEFILE")==0)
			{
				char buf0[60];
				char buf1[60];
				scanf("%s",buf0);
				scanf("%s",buf1);
				string str0;
				string str1;
				str0=buf0;
				str1=buf1;
				File[str1].push_back(str0);
			}
			if(strcmp(buf,"CREATEDIR")==0)
			{
				char buf0[60];
				char buf1[60];
				scanf("%s",buf0);
				scanf("%s",buf1);
				string str0;
				string str1;
				str0=buf0;
				str1=buf1;
				Dir[str1].push_back(str0);
			}
			if(strcmp(buf,"LISTFILE")==0)
			{
				char buf0[60];
				scanf("%s",buf0);
				string str0;
				str0=buf0;
				for(int i=0;i<File[str0].size();i++)
				{
					printf("%s\n",File[str0][i].c_str());
				}
			}
			if(strcmp(buf,"LISTDIR")==0)
			{
				char buf0[60];
				scanf("%s",buf0);
				string str0;
				str0=buf0;
				DFS(str0);//经过更改,可以求出改目录下所有目录,以及他们的所有子目录 
			}
		}
	}
	return 0; 
}

通过递归查询,就可以搜索所有子目录了,文件也是能够查询的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值