第十七岁不哭主题曲题

你看不到我~
看不到我……
视频: 2012高考新课标理综第十七题自耦变压器
<mendVideo();
分享给好友
2012高考新课标理综第十七题自耦变压器
下载至电脑
扫码用手机看
用或微信扫码在手机上继续观看
二维码2小时内有效
把视频贴到Blog或BBS&&
<input id="link4" type="text" class="form_input form_input_s" value=''>
flash地址:
<input type="text" class="form_input form_input_s" id="link3" value=''>
手机扫码分享视频
二维码2小时内有效
2012高考新课标理综第十七题自耦变压器
扫码用手机继续看
用或微信扫码在手机上继续观看
二维码2小时内有效,扫码后可分享给好友
没有优酷APP?立即下载
请根据您的设备选择下载版本
新课标 2012 高考 理综 第十七题 自耦变压器 名师辅导 试题讲解 状元解析 YMA2
万万表情系列(VIP会员专享)
泡芙表情系列(VIP会员专享)
暴漫表情系列(VIP会员专享)
节目制作经营许可证京字670号
药品服务许可证(京)-经营-物理第17题, 物理第17题
兰寄予2014-5
物理第17题
兰寄予 物理第17题
1.p=F&#47;s=mg&#47;s=10000kg*10N&#47;kg&#47;2*2平方米=乏弗催煌诎号挫铜旦扩25000pa2.p=肉gh=1000kg&#47;立方米*10N&#47;kg*(5-2)m经典算法题每日演练——第十七题 Dijkstra算法 - 推酷
经典算法题每日演练——第十七题 Dijkstra算法
& & & 或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划”
这些经典策略,当然有的问题我们可以用贪心来寻求整体最优解,在图论中一个典型的贪心法求最优解的例子就莫过于“最短路径”的问题。
& &从下图中我要寻找V
的最短路径,你会发现通往他们的两点路径有很多:V
当然你会认为前者是你要找的最短
路径,那如果说图的顶点非常多,你还会这么轻易的找到吗?下面我们就要将刚才我们那点贪心的思维系统的整理下。
& & 如果大家已经了解Prim算法,那么Dijkstra算法只是在它的上面延伸了下,其实也是很简单的。
& 这里有点不一样的地方就是我在边上面定义一个vertexs来记录贪心搜索到某一个节点时曾经走过的节点,比如从V
贪心搜索到V
的vertexs可能存放着V
这些曾今走过的节点,或许最后这三个节点就是我们要寻找的最短路径。
1 #region 边的信息
/// &summary&
/// 边的信息
/// &/summary&
public class Edge
public int startE
public int endE
//是否使用
public bool isU
//累计顶点
public HashSet&int& vertexs = new HashSet&int&();
#endregion
2.Dijkstra算法
首先我们分析下Dijkstra算法的步骤:
有集合M={V0,V1,V2,V3,V4}这样5个元素,我们用
TempVertex表示该顶点是否使用。
Weight表示该Path的权重(默认都为MaxValue)。
Path表示该顶点的总权重。
①. 从集合M中挑选顶点V0为起始点。给V0的所有邻接点赋值,要赋值的前提是要赋值的weight要小于原始的weight,并且排除已经访问过
& & &的顶点,然后挑选当前最小的weight作为下一次贪心搜索的起点,就这样V0V1为挑选为最短路径,如图2。
②. 我们继续从V1这个顶点开始给邻接点以同样的方式赋值,最后我们发现V0V4为最短路径。也就是图3。
③. 最后所有顶点的最短路径就这样求出来了 。
1 #region Dijkstra算法
/// &summary&
/// Dijkstra算法
/// &/summary&
public Dictionary&int, Edge& Dijkstra()
//收集顶点的相邻边
Dictionary&int, Edge& dic_edges = new Dictionary&int, Edge&();
//weight=MaxValue:标识没有边
for (int i = 0; i & graph.vertexsN i++)
var startEdge =
dic_edges.Add(startEdge, new Edge() { weight = int.MaxValue });
//取第一个顶点
var start = 0;
for (int i = 0; i & graph.vertexsN i++)
//标记该顶点已经使用过
dic_edges[start].isUse =
for (int j = 1; j & graph.vertexsN j++)
//取到相邻边的权重
var weight = graph.edges[start, end];
//赋较小的权重
if (weight & dic_edges[end].weight)
//与上一个顶点的权值累加
var totalweight = dic_edges[start].weight == int.MaxValue ? weight : dic_edges[start].weight +
if (totalweight & dic_edges[end].weight)
//将该顶点的相邻边加入到集合中
dic_edges[end] = new Edge()
startEdge = start,
endEdge = end,
weight = totalweight
//将上一个边的节点的vertex累加
dic_edges[end].vertexs = new HashSet&int&(dic_edges[start].vertexs);
dic_edges[end].vertexs.Add(start);
dic_edges[end].vertexs.Add(end);
var min = int.MaxV
//下一个进行比较的顶点
int minkey = 0;
//取start邻接边中的最小值
foreach (var key in dic_edges.Keys)
//取当前 最小的 key(使用过的除外)
if (min & dic_edges[key].weight && !dic_edges[key].isUse)
min = dic_edges[key].
//从邻接边的顶点再开始找
return dic_
#endregion
总的代码:复杂度很烂O(N
using System.Collections.G
using System.L
using System.T
using System.D
using System.T
using System.IO;
using System.Threading.T
namespace ConsoleApplication2
public class Program
public static void Main()
Dictionary&int, string& dic = new Dictionary&int, string&();
MatrixGraph graph = new MatrixGraph();
graph.Build();
var result = graph.Dijkstra();
Console.WriteLine(&各节点的最短路径为:&);
foreach (var key in result.Keys)
Console.WriteLine(&{0}&, string.Join(&-&&, result[key].vertexs));
Console.Read();
#region 定义矩阵节点
/// &summary&
/// 定义矩阵节点
/// &/summary&
public class MatrixGraph
Graph graph = new Graph();
public class Graph
/// &summary&
/// 顶点信息
/// &/summary&
public int[]
/// &summary&
/// 边的条数
/// &/summary&
public int[,]
/// &summary&
/// 顶点个数
/// &/summary&
public int vertexsN
/// &summary&
/// 边的个数
/// &/summary&
public int edgesN
#region 矩阵的构建
/// &summary&
/// 矩阵的构建
/// &/summary&
public void Build()
graph.vertexsNum = 5;
graph.edgesNum = 6;
graph.vertexs = new int[graph.vertexsNum];
graph.edges = new int[graph.vertexsNum, graph.vertexsNum];
//构建二维数组
for (int i = 0; i & graph.vertexsN i++)
graph.vertexs[i] =
for (int j = 0; j & graph.vertexsN j++)
graph.edges[i, j] = int.MaxV
//定义 6 条边
graph.edges[0, 1] = graph.edges[1, 0] = 2;
graph.edges[0, 2] = graph.edges[2, 0] = 5;
graph.edges[0, 4] = graph.edges[4, 0] = 3;
graph.edges[1, 3] = graph.edges[3, 1] = 4;
graph.edges[2, 4] = graph.edges[4, 2] = 5;
graph.edges[3, 4] = graph.edges[4, 3] = 2;
#endregion
#region 边的信息
/// &summary&
/// 边的信息
/// &/summary&
public class Edge
public int startE
public int endE
//是否使用
public bool isU
//累计顶点
public HashSet&int& vertexs = new HashSet&int&();
#endregion
#region Dijkstra算法
/// &summary&
/// Dijkstra算法
/// &/summary&
public Dictionary&int, Edge& Dijkstra()
//收集顶点的相邻边
Dictionary&int, Edge& dic_edges = new Dictionary&int, Edge&();
//weight=MaxValue:标识没有边
for (int i = 0; i & graph.vertexsN i++)
var startEdge =
dic_edges.Add(startEdge, new Edge() { weight = int.MaxValue });
//取第一个顶点
var start = 0;
for (int i = 0; i & graph.vertexsN i++)
//标记该顶点已经使用过
dic_edges[start].isUse =
for (int j = 1; j & graph.vertexsN j++)
//取到相邻边的权重
var weight = graph.edges[start, end];
//赋较小的权重
if (weight & dic_edges[end].weight)
//与上一个顶点的权值累加
var totalweight = dic_edges[start].weight == int.MaxValue ? weight : dic_edges[start].weight +
if (totalweight & dic_edges[end].weight)
//将该顶点的相邻边加入到集合中
dic_edges[end] = new Edge()
startEdge = start,
endEdge = end,
weight = totalweight
//将上一个边的节点的vertex累加
dic_edges[end].vertexs = new HashSet&int&(dic_edges[start].vertexs);
dic_edges[end].vertexs.Add(start);
dic_edges[end].vertexs.Add(end);
var min = int.MaxV
//下一个进行比较的顶点
int minkey = 0;
//取start邻接边中的最小值
foreach (var key in dic_edges.Keys)
//取当前 最小的 key(使用过的除外)
if (min & dic_edges[key].weight && !dic_edges[key].isUse)
min = dic_edges[key].
//从邻接边的顶点再开始找
return dic_
#endregion
#endregion
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 我和我的十七岁主题曲 的文章

 

随机推荐