• A1053 Path of Equal Weight (30分)


    一、技术总结

    1. 但是首先得明白这里的题意是什么,已经读懂的前提下,这里是给出一棵树,每个结点都有自己的权重,然后权重值之和等于所给数值,输出路径中每个结点的权重。
    2. 首先的明白怎么存储,定义数据域,然后用vector容器进行子结点的存储
    3. 题中要求结果输出要进行非增进行输出,就是这句话,只要第一个数不同,然后输出按照大的进行输出,这就意味着需要排序
    4. 使用sort函数,编写cmp进行排序,将大的权重排到每个子结点的前面。
    5. 编写DFS函数,要明确什么是递归边界,怎么进行遍历。这里无非就是sum大于所给值,还有就是恰好等于时,输出结果。

    三、参考代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 110;
    struct node{
    	int data;
    	vector<int> child;
    }Node[maxn];
    bool cmp(int a, int b){
    	return Node[a].data > Node[b].data;
    }
    int n, num, s;//n是结点的数量。num是非叶子结点的数量,s是路径权重和 
    int path[maxn];//用于记录路径
    //当前访问结点为index,numNode为当前路径path上结点的个数
    //sum为当前权重的和 
    void DFS(int index, int numNode, int sum){
    	if(sum > s) return;
    	if(sum == s){
    		if(Node[index].child.size() != 0) return;//还没到达叶子结点直接返回
    		//到达叶子结点,此时path[]中存放了一条完整路径,输出它
    		for(int i = 0; i < numNode; i++){
    			printf("%d", Node[path[i]].data);
    			if(i < numNode-1) printf(" ");
    			else printf("
    ");
    		} 
    		return;
    	}
    	for(int i = 0; i < Node[index].child.size(); i++){//枚举所有子结点 
    		int child = Node[index].child[i];//结点index的第i的子结点编号 
    		path[numNode] = child;//将child加到路径path末尾 
    		DFS(child, numNode+1, sum+Node[child].data);//递归进入下一层 
    	}
    }
    int main(){
    	scanf("%d%d%d", &n, &num, &s);
    	int w;//权重 
    	for(int i = 0; i < n; i++){
    		scanf("%d", &w);
    		Node[i].data = w; 
    	}
    	int index1, sum;//记录下标 
    	for(int i = 0; i < num; i++){
    		scanf("%d%d", &index1, &sum);
    		int index2;
    		for(int j = 0; j < sum; j++){
    			scanf("%d", &index2);
    			Node[index1].child.push_back(index2);
    		}
    		sort(Node[index1].child.begin(), Node[index1].child.end(), cmp);
    	}
    	path[0] = 0;
    	DFS(0, 1, Node[0].data);
    	return 0;
    } 
    
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    Windows下获取逻辑cpu数量和cpu核数量
    QtScript, QML, Quick1, Quick2, Declarative 之间的关系
    将QT开发的界面程序封装成DLL,在VC中成功调用(必须有消息循环,所以使用了QTWinmigrate,附CSDN可下载的Demo)
    QPixmap的缓冲区
    Qt+QZXing编写识别二维码的程序
    ASP.NET 5:依赖注入
    angularJS之使用指令封装DOM操作
    Windows 10技术布局,谈微软王者归来
    Microsoft dotnetConf 2015
    Net社区虚拟大会
  • 原文地址:https://www.cnblogs.com/tsruixi/p/12319150.html
Copyright © 2020-2023  润新知