文件结构“图” poj2775

这是个递归的题。一开始我没想出来,后来参考了网上的思路。用的vector(这个是一开始想好的)关键是递归过程的进入,我已开始想复杂了。输入的时候只有两种情况,dir或者file,file就是递归出口,dir就继续递归。

而输入呢,需要一个参数来表示他是第几层。在输出file时,用了sort函数,很方便。

在main函数里每次while循环完了要重新初始化一下dir。

这里还取巧了,输入*和]都是退出当前一层,但是退着退着回到主函数了

同时输出的时候也用了递归输出,先输出当前层次,然后继续深入下去。遍历它的dir和files

#include<iostream>

#include<vector>
#include<algorithm>
#include<string>
using namespace std;
class Dir{
public:
string name;
vector<Dir> dirs;
vector<string> files;
};
Dir getResult(string name){
Dir dir;
string tmp;
cin >> tmp;
if(tmp == "#")
return dir;
dir.name = name;
while(tmp != "*"&&tmp != "]"){
if(tmp[0] == 'f')
dir.files.push_back(tmp);
else
dir.dirs.push_back(getResult(tmp));
cin >> tmp;
}
return dir;
}
void foutput(string name,int level){
for(int i = 0;i < level;i++)
cout << "|     ";
cout << name << endl;
}
void doutput(Dir dir,int level){
foutput(dir.name,level);
int i;
for(i = 0;i < dir.dirs.size();i++)
doutput(dir.dirs[i],level+1);
sort(dir.files.begin(),dir.files.end());
for(i = 0;i < dir.files.size();i++)
foutput(dir.files[i],level);
}
int main(){
int countNum(1);
Dir dir = getResult("ROOT");
while(dir.name == "ROOT")
{
cout<<"DATA SET "<<countNum<<":"<<endl;
doutput(dir,0);
cout<<endl;
countNum++;
dir = getResult("ROOT");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值