,长沙现在的天气.还真不是盖的..没春天,没秋天.痛苦的日子又要来了.,今天周末..跑出去和同学玩疯了.都有那种感觉,.,.大三,,才是真正最累的时候,也是学习最给力的时候,,但对于我这个爱混的人也无所谓累不累的.学习对我而言即是看心情了.反正多数是玩疯了.不过学习的时候也蛮疯..能连续几天坐在图书馆里不出来(PS:当然还是要出去吃饭滴,我吃饭速度很Fast ,,和男生有得一比哈)...不过值得提起的是,今天可累惨了.穿了双高跟鞋在外游荡了几个小时 ...结果是脚快断了...不过我们学校本部的经典景色算是全收入囊中了,也不枉费我大半天的功夫了,今天的天气足以证明:我还没到夏天就黑了,晒了一天,果断黑......
算了,废话少说,还是纪念今天晚上写一个继上次文件操作的用回溯解决的目录嵌子目录的处理吧..整体的文件还没出来,就是上次MR杨让我们搞定的事.下次一起整理出来.还脚本没整理好.
- #include <cstdlib>
- #include <iostream>
- #include<stdio.h>
- #include<sys/stat.h>
- #include<dir.h>
- using namespace std;
- struct stat buf ;
- struct _finddata_t ff;
- long i;
- void dfs(char *sf){
- if(S_ISREG(buf.st_mode)){
- //说明到达底层目录,即单个文件,直接返回
- // return;
- }else{
- //对子目录的处理
- _chdir(sf); //目录
- if((i=_findfirst("*.*", &ff))==-1L)
- {
- printf("空白!/n");
- exit(0);
- }
- //遍历每个子目录
- while(_findnext(i,&ff)==0){
- //取下层的每个目录名
- char sname[100]="";
- strcat(sname,sf);
- strcat(sname,"//");
- strcat(sname,ff.name);
- if(!strcmp(ff.name,"..")) { printf("%s/n",sname);continue;}
- if(stat(sname,&buf)<0) {perror("递归子函数出错");exit(0);}
- if(S_ISDIR(buf.st_mode)) dfs(sname); //深入下层
- else if(S_ISREG(buf.st_mode)){
- //直接输出文件路径及文件名
- printf("%s/n",sname);
- }
- }
- /*
- 由于是递归进行搜索子目录,就不能在此处进行关闭,否则将出错.只能在所有递归都结束后进行.--即主函数里
- _findclose(i);
- */
- }
- }
- int main(int argc, char *argv[])
- {
- if(argc<2) exit(0);
- if(stat(argv[1],&buf)<0){
- perror("main函数出错");
- exit(0);
- _findclose(i);
- }
- dfs(argv[1]);
- system("PAUSE");
- return EXIT_SUCCESS;
- }
只是C总是习惯用C++编译器去写了,就因为习惯..汗..这里其实没很多要说的,.中间就用到了最最基本的回溯搜索法,,递归的那种.依葫芦画瓢.若上面的程序不好懂..
来一个最经典的用递归回溯来搜索一个数的全排列.如:3的全排-----
(1 2 3 ) ....(1 3 2 )...(2 1 3 )..(2 3 1 )..(3 1 2)..(3 2 1)-----------共计6种,,即3*2*1
- #include <cstdlib>
- #include <iostream>
- #define N 5
- using namespace std;
- int x[N],s=0;
- bool judge(int num,int len){
- for(int i=0;i<len;i++)
- if(num==x[i]) return true;
- return false;
- }
- void output()
- {
- for(int i=0;i<N;i++)
- cout<<x[i]<<" ";
- cout<<endl;
- }
- void f(int t){
- if(t>N){
- output();
- s++;
- }
- else{
- for(int i=1;i<=N;i++)
- {
- x[t-1]=i;
- if(!judge(i,t-1)) f(t+1);
- }
- }
- }
- int main(int argc, char *argv[])
- {
- f(1);
- cout<<s<<endl;
- system("PAUSE");
- return EXIT_SUCCESS;
- }