<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/log4life" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/log4life" type="application/rss+xml"></fs:self_link><lastBuildDate>Mon, 07 Dec 2009 12:40:00 GMT</lastBuildDate><title>Log4life</title><description>Log4life</description><image><url>http://www.feedsky.com/feed/log4life/sc/gif</url><title>Log4life</title><link>http://pipes.yahoo.com/pipes/pipe.info?_id=e440150b8937153a9ad492a0db8202cc</link></image><link>http://pipes.yahoo.com/pipes/pipe.info?_id=e440150b8937153a9ad492a0db8202cc</link><pubDate>Tue, 09 Feb 2010 22:09:00 GMT</pubDate><item><title>Go 编程语言入门教程 （二）</title><link>http://blog.csdn.net/passos/archive/2009/12/07/4959300.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    &lt;p&gt;原文：&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://golang.org/&quot;&gt;http://golang.org&lt;/a&gt; &lt;br /&gt;翻译：刘金雨/刘云涛 &amp;lt;yuntao.liu#gmail.com&amp;gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.log4think.com&quot;&gt;http://www.log4think.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;数据类型 Types&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt;Go有一些常见的数据类型，例如 int 和 float，其值采用机器&amp;ldquo;适用&amp;rdquo;的大小来表示。也有定义了明确大小的数据类型，例如 int8、float64 等，以及无符号整数类型，例如 uint、uint32 等。这些都是完全不同的数据类型，即使 int 和int32 都是32位整数，但它们是不同的类型。对于表示字符串元素的类型 byte 和uint8 也是同样如此。&lt;br /&gt;说到字符串（ string ），这也是一个内置的数据类型。 字符串的值不仅仅是一个byte 的数组，它的值是不可改变的。一旦确定了一个字符串的值，就不能再修改了。但一个字符串变量的值可以通过重新赋值来改变。下面这段来自 strings.go的代码是合法的：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s := &quot;hello&quot;;&lt;br /&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if s[1] != 'e' { os.Exit(1) }&lt;br /&gt;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s = &quot;good bye&quot;;&lt;br /&gt;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var p *string = &amp;amp;s;&lt;br /&gt;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = &quot;ciao&quot;;&lt;br /&gt;然而下面这段代码是非法的，因为它试图修改一个字符串的值：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s[0] = 'x';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (*p)[1] = 'y';&lt;br /&gt;按照C++的说法，Go的字符串有点类似带了 const 修饰符，指向字符串的指针也类似于一个 const 字符串的引用（reference）.&lt;br /&gt;没错，前面看到的那些是指针，然而Go语言中的指针在用法方面有所简化，后文会提到。&lt;br /&gt;数组的声明如下所示：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var arrayOfInt [10]int;&lt;br /&gt;数组同字符串一样是&amp;ldquo;值&amp;rdquo;，但是却是可变的。与C不同的是，C语言中 arrayOfInt可以当做一个指向int的指针来用。在Go中，因为数组是&amp;ldquo;值&amp;rdquo;，因此 arrayOfInt被看做（也被用做）指向数组的指针。&lt;br /&gt;数组的大小是其数据类型的一部分。但是，你可以声明一个 slice 变量，然后可以用一个指向具有相同元素类型的数组指针给它赋值，更常见的是用一个形式为a[low : high]的 slice 表达式，该表达式表示下标从 low 到 high-1 的子数组。 Slice 类型类似数组，但没有显式指定大小 ([] 之于 [10])，用于表示一个隐性（通常是匿名的）数组。如果不同的 slice 都是表示同一个数组中的数据，它们可以共享该数组的内存，但不同的数组则永远不会共享内存数据。&lt;br /&gt;Slice 在Go 程序中比数组更常见。它更灵活，并且具有引用的语义，效率也更高。其不足之处在于无法像数组一样精确控制存储方式，如果想在一个数据结构中保存一个具有100个元素的序列，应该采用数组。&lt;br /&gt;当给函数传一个数组参数的时候，绝大多数情况下都会把参数声明为 slice 类型。当调用函数时，先取数组地址，然后Go会创建一个 slice 的引用，然后传这个引用过去。&lt;br /&gt;可以用 slice 来写这个函数(来自 sum.go)：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;09&amp;nbsp;&amp;nbsp;&amp;nbsp; func sum(a []int) int {&amp;nbsp;&amp;nbsp; // 返回一个整数&lt;br /&gt;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s := 0;&lt;br /&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i := 0; i &amp;lt; len(a); i++ {&lt;br /&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s += a[i]&lt;br /&gt;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s&lt;br /&gt;15&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;之后这样来调用：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;19&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s := sum(&amp;amp;[3]int{1,2,3});&amp;nbsp; // a slice of the array is passed to sum&lt;br /&gt;注意在sum()的参数列表后面加 int 定义了其返回值类型（int）。[3]int{1,2,3} 的形式是一个数据类型后面接一个大括号括起来的表达式，整个这个表达式构造出了一个值，这里是一个包含三个整数的数组。前面的 &amp;amp; 表示提取这个值的地址。这个地址会被隐性的转为一个 slice 传给 sum() 。&lt;br /&gt;如果想创建一个数组，但希望编译器来帮你确定数组的大小，可以用 ... 作为数组大小：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s := sum(&amp;amp;[...]int{1,2,3});&lt;br /&gt;实际使用中，除非非常在意数据结构的存储方式，否则 slice 本身 （用[]且不带&amp;amp;） 就足够了：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s := sum([]int{1,2,3});&lt;br /&gt;除此之外还有map，可以这样初始化：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m := map[string]int{&quot;one&quot;:1 , &quot;two&quot;:2}&lt;br /&gt;sum还第一次出现了内置函数 len()，用于返回元素数量。可以用于字符串、数组、slice、map、map 和 channel.&lt;br /&gt;此外， for 循环中的 range 也可以用于字符串、数组、slice、map、map 和 channel。例如&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i := 0; i &amp;lt; len(a); i++ { ... }&lt;br /&gt;遍历一个序列的每个元素，可以写成&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i, v := range a { ... }&lt;br /&gt;其中， i 会赋值为下标， v 会赋值为 a 中对应的值，Effective Go 中包含了更多的用法演示。&lt;/p&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/330940935/log4life/feedsky/s.gif?r=http://blog.csdn.net/passos/archive/2009/12/07/4959300.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330940935/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330940935/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>&lt;br /&gt;原文：http://golang.org&lt;br /&gt;翻译：刘金雨/刘云涛 http://www.log4think.com数据类型 Types&lt;br /&gt;&lt;br /&gt;Go有一些常见的数据类型，例如 int 和 float，其值采用机器“适用”的大小来表示。也有定义了明确大小的数据类型，例如 int8、float64 等，以及无符号整数类型，例如 uint、uint32 等。这些都是完全不同的数据类型，即使 int 和int32 都是32位整数，但它们是不同的类型。对于表示字符串元素的类型 byte 和uint8 也是同样如此。&lt;br /&gt;说到字符串（ string ），这也是一个内置的数据类型。 字符串的值不仅仅是一个byte 的数组，它的值是不可改变的。一旦确定了一个字符串的值，就不能再修改了。但一个字符串变量的值可以通过重新赋值来改变。下面这段来自 strings.go的代码是合法的：&lt;br /&gt;&lt;br /&gt;11 s := &quot;hello&quot;;&lt;br /&gt;12 if s[1] != 'e' { os&lt;img src=&quot;http://www1.feedsky.com/t1/306493417/passos/csdn.net/s.gif?r=http://blog.csdn.net/passos/archive/2009/12/07/4959300.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;&quot;/&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/306493417/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/306493417/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330940935/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330940935/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Mon, 07 Dec 2009 20:40:00 +0800</pubDate><author>刘金雨</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2009/12/07/4959300.aspx</guid><dc:creator>刘金雨</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2009/12/07/4959300.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330940935/5386560</fs:itemid></item><item><title>新的blog地址</title><link>http://blog.csdn.net/passos/archive/2009/12/05/4946250.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    &lt;p&gt;新的blog，独立域名、独立管理、随便加widget，基于GAE和micolog的 &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.log4think.com&quot;&gt;http://www.log4think.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/330941005/log4life/feedsky/s.gif?r=http://blog.csdn.net/passos/archive/2009/12/05/4946250.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941005/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941005/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>新的blog地址 http://blog.log4think.com&lt;img src=&quot;http://www1.feedsky.com/t1/305644438/passos/csdn.net/s.gif?r=http://blog.csdn.net/passos/archive/2009/12/05/4946250.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;&quot;/&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/305644438/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/305644438/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941005/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941005/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sat, 05 Dec 2009 14:12:00 +0800</pubDate><author>刘金雨</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2009/12/05/4946250.aspx</guid><dc:creator>刘金雨</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2009/12/05/4946250.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330941005/5386560</fs:itemid></item><item><title>Go 编程语言入门教程 （一）</title><link>http://blog.csdn.net/passos/archive/2009/11/24/4865487.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    &lt;h2&gt;Go 编程语言入门教程&lt;/h2&gt;
&lt;p&gt;原文：&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://golang.org/&quot;&gt;http://golang.org&lt;/a&gt; &lt;br /&gt;翻译：刘金雨/刘云涛 &amp;lt;yuntao.liu#gmail.com&amp;gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://log4think.appspot.com/&quot;&gt;http://www.log4think.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_5&quot;&gt;介绍&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_10&quot;&gt;Hello, World&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_22&quot;&gt;编译&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_31&quot;&gt;Echo&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_66&quot;&gt;数据类型 Types&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_109&quot;&gt;分配 Allocation&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_125&quot;&gt;常量 Constants&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_134&quot;&gt;I/O 包&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_172&quot;&gt;Rotting cats&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_203&quot;&gt;排序&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_223&quot;&gt;打印输出&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_266&quot;&gt;素数&lt;/a&gt; &lt;/dt&gt;&lt;dt&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.csdn.net/passos/archive/2009/11/24/#tmp_306&quot;&gt;Multiplexing&lt;/a&gt; &lt;/dt&gt;&lt;/dl&gt;
&lt;h2&gt;介绍&lt;/h2&gt;
&lt;p&gt;本文档是关于Go编程语言基础的一个介绍性的入门教程，偏向于熟悉C或C++的读者。本文并非一份语言的完整指南，如果需要的话，你应该去看看&amp;ldquo;语言规范&amp;rdquo;（language specification）。当读完本教程之后，你可能会希望继续看看&amp;ldquo;Effective Go&amp;rdquo;，这份文档更深入的挖掘如何使用Go语言。此外还有一份《三日入门》的教程可供参考: 第一日,第二日, 第三日.&lt;br /&gt;本文将会以一系列适当的程序来说明语言的一些关键特性。所有的示例程序都是可运行的（在撰写本文时），并且这些程序都会提交到版本库的/doc/progs/目录下。&lt;br /&gt;程序片段都会标注上在源文件中的行号，为了清晰起见，空行前面的行号留空。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Hello, World&lt;/h2&gt;
&lt;p&gt;让我们以最常见的方式开始吧:&lt;br /&gt;05&amp;nbsp;&amp;nbsp;&amp;nbsp; package main&lt;/p&gt;
&lt;p&gt;07&amp;nbsp;&amp;nbsp;&amp;nbsp; import fmt &quot;fmt&quot;&amp;nbsp; // 本包实现了格式化输入输出&lt;/p&gt;
&lt;p&gt;09&amp;nbsp;&amp;nbsp;&amp;nbsp; func main() { &lt;br /&gt;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf(&quot;Hello, world; or &amp;Kappa;&amp;alpha;&amp;lambda;&amp;eta;&amp;mu;έ&amp;rho;&amp;alpha; &amp;kappa;ό&amp;sigma;&amp;mu;&amp;epsilon;; or こんにちは 世界&amp;#92;n&quot;); &lt;br /&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;每份Go的源文件都会使用 package 语句声明它的包名。同时也可以通过导入其它包来使用其中定义的功能。这段代码导入了包 fmt 来调用我们的老朋友&amp;mdash;&amp;mdash;现在它的开头字母是大写的，并且前面带有包名限定&amp;mdash;&amp;mdash;fmt.Printf。&lt;br /&gt;函数的声明使用关键字func ，整个程序将会从为main 包中的main 函数开始（经过初始化之后）。&lt;br /&gt;字符串常量可以包含Unicode字符，采用UTF-8编码。（事实上，所有Go程序的源文件都是使用UTF-8编码的）&lt;br /&gt;注释的方式同C++一样：&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ... */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...&lt;br /&gt;稍后，我们会继续谈到print。&lt;/p&gt;
&lt;h2&gt;编译&lt;/h2&gt;
&lt;p&gt;Go是一个编译型语言。目前有两个编译器，其中gccgo编译器采用了GCC作为后端，此外还有一系列根据其所适用的架构命名的编译器，例如6g 适用于64位的x86结构，8g 适用于32位的x86结构，等等。这些编译器比gccgo运行的更快、生成的代码更加有效率。在撰写本文的时候（2009年底），他们还具有一个更加健壮的运行期系统，但是gccgo 也正在迎头赶上。&lt;br /&gt;下面来看看如何编译和运行程序。采用 6g 是这样的&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ 6g helloworld.go&amp;nbsp; # 编译; 中间代码位于 helloworld.6 中&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ 6l helloworld.6&amp;nbsp;&amp;nbsp; # 链接; 输出至 6.out&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ 6.out&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hello, world; or &amp;Kappa;&amp;alpha;&amp;lambda;&amp;eta;&amp;mu;έ&amp;rho;&amp;alpha; &amp;kappa;ό&amp;sigma;&amp;mu;&amp;epsilon;; or こんにちは 世界&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $&lt;br /&gt;gccgo 的方式看起来更加传统一些。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ gccgo helloworld.go&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ a.out&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hello, world; or &amp;Kappa;&amp;alpha;&amp;lambda;&amp;eta;&amp;mu;έ&amp;rho;&amp;alpha; &amp;kappa;ό&amp;sigma;&amp;mu;&amp;epsilon;; or こんにちは 世界&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $&lt;/p&gt;
&lt;h2&gt;Echo&lt;/h2&gt;
&lt;p&gt;下一步，是来实现一个Unix的传统命令Echo：&lt;br /&gt;05&amp;nbsp;&amp;nbsp;&amp;nbsp; package main&lt;/p&gt;
&lt;p&gt;07&amp;nbsp;&amp;nbsp;&amp;nbsp; import ( &lt;br /&gt;08&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;os&quot;; &lt;br /&gt;09&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;flag&quot;;&amp;nbsp; // command line option parser &lt;br /&gt;10&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/p&gt;
&lt;p&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp; var omitNewline = flag.Bool(&quot;n&quot;, false, &quot;don't print final newline&quot;)&lt;/p&gt;
&lt;p&gt;14&amp;nbsp;&amp;nbsp;&amp;nbsp; const ( &lt;br /&gt;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Space = &quot; &quot;; &lt;br /&gt;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Newline = &quot;&amp;#92;n&quot;; &lt;br /&gt;17&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/p&gt;
&lt;p&gt;19&amp;nbsp;&amp;nbsp;&amp;nbsp; func main() { &lt;br /&gt;20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag.Parse();&amp;nbsp;&amp;nbsp; // Scans the arg list and sets up flags &lt;br /&gt;21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var s string = &quot;&quot;; &lt;br /&gt;22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i := 0; i &amp;lt; flag.NArg(); i++ { &lt;br /&gt;23&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i &amp;gt; 0 { &lt;br /&gt;24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s += Space &lt;br /&gt;25&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;26&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s += flag.Arg(i); &lt;br /&gt;27&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if !*omitNewline { &lt;br /&gt;29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s += Newline &lt;br /&gt;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.Stdout.WriteString(s); &lt;br /&gt;32&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;这段程序很小，但是却有几个特别之处。前面这个例子中，我们看到可以使用func 来声明一个函数，同时关键字 var、const和type （目前还没有用到）也可以用于声明，就好像 import 一样。注意，我们可以将同一类的声明放到括号中，以分号分隔，例如第7-10行和第14-17行。但也并非一定要如此，例如可以这样写&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const Space = &quot; &quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const Newline = &quot;&amp;#92;n&quot;&lt;br /&gt;分号在此处并不是必须的。事实上，任何顶层声明后面都不需要分号。但如果要是在一个括号内进行一系列的声明，就需要用分号来分割了。&lt;br /&gt;你可以像在C、C++或Java中那样去使用分号，但如果你喜欢的话，在很多情况下都可以省略掉分号。分号是用于表示语句间的分隔，而非表示其中止。因此对于一个代码块中的最后一条语句来说，有无分号皆可。大括号之后的分号也是可选的，就像C语言中的一样。比对一下echo的源代码，只有第8、15和21行必须要加分号，当然第22行中的 for 语句中为了分隔三个表达式也需要加分号。第9、16、26和31行的分号都不是必须的，加上分号只是为了以后再增加语句的时候方便而已。&lt;br /&gt;这个程序导入了os包以访问 Stdout 变量，Stdout的类型是&amp;nbsp; *os.File 。import 语句实际上是个声明：通常情况下（如hello world程序中那样），它命名了一个标识符fmt用于访问导入的包的成员变量，而包是从当前目录或标准库下的&quot;fmt&quot;文件中导入的。在这个程序中，我们为导入的包显式的指定了一个名字，默认情况下，包名是采用在导入的包里面已经定义好的名字，通常会与文件名一致。因此在这个&amp;ldquo;hello world&amp;rdquo;程序中，可以只写 import &quot;fmt&quot; 。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;你可以任意为包指定一个导入名，但通常只有在解决名字冲突的情况下才有必要这样做。&lt;br /&gt;有了 os.Stdout，我们就可以用它的 WriteString 方法打印字符串了。&lt;br /&gt;导入了 flag 包之后，第12行创建了一个全局变量来保存 echo 的 -n 选项标志。omitNewline 变量的类型是 *bool &amp;mdash;&amp;mdash;指向bool值的指针。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;在 main.main中进行了参数解析，并创建了一个本地字符串类型的变量用于构造输出的内容。声明语句如下&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var s string = &quot;&quot;;&lt;br /&gt;这里用到了关键字 var ，后面跟变量名和数据类型，之后可以继续接=来赋初值。&lt;br /&gt;Go 试图尽量保持简洁，这个声明也可以用更短的形式。因为初值是一个字符串类型的常量，没有必要再声明数据类型了， 因此这个声明可以写成这样：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var s = &quot;&quot;;&lt;/p&gt;
&lt;p&gt;或者也可以直接用更短的形式：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s := &quot;&quot;;&lt;/p&gt;
&lt;p&gt;操作符 := 在 Go 语言里经常会用在赋初值的声明中，比如下面这个 for 语句的声明：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i := 0; i &amp;lt; flag.NArg(); i++ {&lt;/p&gt;
&lt;p&gt;flag 包会解析命令行参数，并将参数值保存在一个列表中。&lt;br /&gt;Go语言中的 for 语句和C语言中的有几个不同之处。首先，for是唯一的循环语句，没有 while 语句或 do 语句。其次，for 语句后面的三个子句不需要圆括号，但大括号是必须的。这一条对 if 和 switch 语句同样适用。稍后还会有几个例子演示for 语句的其它用法。&lt;br /&gt;循环体中通过追加（+=）标志和空格构造字符串 s 。循环之后，如果没有设置 -n 标志，程序追加一个空行，最后输出结果。&lt;br /&gt;注意，函数 main.main 没有返回值。它就是这样定义的，如果到达了main.main 的末尾就表示&amp;ldquo;成功&amp;rdquo;，如果想表明出错并返回，可以调用&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.Exit(1)&lt;br /&gt;os 包还包含一些其他的常用功能，例如 os.Args 会被 flag 包用于访问命令行参数。&lt;/p&gt;


&lt;p&gt;（未完待续）&lt;/p&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/330941035/log4life/feedsky/s.gif?r=http://blog.csdn.net/passos/archive/2009/11/24/4865487.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941035/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941035/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>Go 编程语言入门教程原文：http://golang.org 翻译：刘金雨/刘云涛 http://log4think.appspot.com/介绍本文档是关于Go编程语言基础的一个介绍性的入门教程，偏向于熟悉C或C++的读者。本文并非一份语言的完整指南，如果需要的话，你应该去看看“语言规范”（language specification
）。当读完本教程之后，你可能会希望继续看看“Effective Go
”，这份文档更深入的挖掘如何使用Go语言。此外还有一份《三日入门》的教程可供参考: 第一日
, 第二日
, 第三日
.本文将会以一系列适当的程序来说明语言的一些关键特性。所有的示例程序都是可运行的（在撰写本文时），并且这些程序都会提交到版本库的/doc/progs/
目录下。程序片段都会标注上在源文件中的行号，为了清晰起见，空行前面的行号留空。 Hello, World让我们以最常见的方式开始吧:05 package main&lt;img src=&quot;http://www1.feedsky.com/t1/305644439/passos/csdn.net/s.gif?r=http://blog.csdn.net/passos/archive/2009/11/24/4865487.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;&quot;/&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/305644439/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/305644439/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941035/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941035/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 24 Nov 2009 17:43:00 +0800</pubDate><author>刘金雨</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2009/11/24/4865487.aspx</guid><dc:creator>刘金雨</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2009/11/24/4865487.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330941035/5386560</fs:itemid></item><item><title>打车抬表费用图</title><link>http://blog.csdn.net/passos/archive/2009/07/05/4322449.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    &lt;p&gt;&lt;textarea cols=&quot;70&quot; rows=&quot;23&quot; name=&quot;code&quot; class=&quot;javascript&quot;&gt;&amp;lt;mce:script type=&quot;text/javascript&quot; src=&quot;wz_jsgraphics.js&quot; mce_src=&quot;wz_jsgraphics.js&quot;&amp;gt;&amp;lt;/mce:script&amp;gt;


&amp;lt;mce:script type=&quot;text/javascript&quot;&amp;gt;&amp;lt;!--
function getPrice(distance, night) {
 var unitPrice = 2.0,
  basicDistance = 3,
  basicPrice = 10,
  extDistance = 15,
  extPrice = 3.0;
 
 var price = 0.0;
 if ( distance == 0 ) return 0;
 if ( distance &amp;lt;= basicDistance ) return basicPrice;
  
 if ( distance &amp;lt;= extDistance ) {
  price = basicPrice + unitPrice * (distance - basicDistance);
  return price;
 }
 
 price += basicPrice + unitPrice*(extDistance-basicDistance) + extPrice*(distance-extDistance)
 return price;
}

function getPriceWithReset(distance, night, reset) {
 if ( reset == 0 ) {
  return getPrice(distance, night);
 } else {
  return getPrice(reset, night) * Math.floor(distance/reset) + getPrice(distance % reset, night);
 }
}

var coordXUnit = 8, coordYUnit = 3,
 basicX = 100, basicY = 50,
 coordMaxX = 101, coordMaxY = 251;

function drawString(str, x, y) {
 jg.drawString(str, basicX+x*coordXUnit, basicY+(coordMaxY-y)*coordYUnit);
}
 
function drawPoint(x, y) {
 drawLine(x, y, x, y);
}

function drawLine(x1, y1, x2, y2) {
 jg.drawLine(basicX + x1*coordXUnit, basicY + (coordMaxY-y1)*coordYUnit, basicX + x2*coordXUnit, basicY + (coordMaxY-y2)*coordYUnit);
}

function drawPolyline(ax, ay) {
 var axx = new Array(), ayy = new Array();

 for (var e in ax) {
  axx.push(basicX + (ax[e] * coordXUnit) );
 }

 for (var e in ay) {
  ayy.push(basicY + (coordMaxY - ay[e])*coordYUnit);
 }

 jg.drawPolyline(axx, ayy);
}
  
function drawCoordinate() {
 jg.setColor(&quot;#ee8800&quot;);
 drawLine(0, 0, coordMaxX, 0);
 drawLine(0, 0, 0, coordMaxY);
 
 drawString(0, -2, -2);
 for (var i = 1; i &amp;lt; coordMaxX; i++) {
  if (i%5==0) {
   // draw grid
   jg.setStroke(Stroke.DOTTED); 
   drawLine(i, 0, i, coordMaxY);
   // draw mark
   jg.setStroke(0); 
   drawLine(i, 0, i, -2);
   drawString(i, i-1, -3);
  } else {
   drawLine(i, 0, i, -1);
  }
 }
 
 for (var i = 1; i &amp;lt; coordMaxY ; i++) {
  if (i%5==0) {
   // draw grid
   jg.setStroke(Stroke.DOTTED); 
   drawLine(0, i, coordMaxX, i);
   // draw mark
   jg.setStroke(0); 
   drawLine(0, i, -2, i);
   drawString(i, -7, i+1);
  } else {
   drawLine(0, i, -1, i);
  }
 }
}

function drawPriceLine(night, reset) {
 var ax = new Array(), ay = new Array();
 
 for (var d=0; d&amp;lt;70; d++) {
  ax.push(d);
  ay.push(getPriceWithReset(d, 0, reset));
 }
 drawPolyline(ax, ay);
}

/////////////// main section ///////////////
var jg = new jsGraphics();
jg.setFont(&quot;verdana,geneva,sans-serif&quot;, &quot;10px&quot;, Font.PLAIN);


drawCoordinate();
drawString(&quot;reset:&quot;, 0, -10);
jg.setColor(&quot;#000000&quot;);
drawPriceLine(0, 0);
drawString(&quot;0&quot;, 5, -10);
jg.setColor(&quot;#FF0000&quot;);
drawPriceLine(0, 10);
drawString(&quot;10&quot;, 10, -10);
jg.setColor(&quot;#00FF00&quot;);
drawPriceLine(0, 15);
drawString(&quot;15&quot;, 15, -10);
jg.setColor(&quot;#0000FF&quot;);
drawPriceLine(0, 20);
drawString(&quot;20&quot;, 20, -10);

///////////////// from wangjing to my home, 35KM /////////////////
jg.setColor(&quot;#880000&quot;);
var xp = new Array(), yp = new Array();
for ( var i=10; i&amp;lt;30; i++) {
 xp.push(i);
 yp.push(getPriceWithReset(35, 0, i));
}
drawPolyline(xp, yp);

drawString(getPriceWithReset(35, 0, 15), 0, -20);
jg.paint();
// --&amp;gt;&amp;lt;/mce:script&amp;gt;

&lt;/textarea&gt; &lt;/p&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/330941076/log4life/feedsky/s.gif?r=http://blog.csdn.net/passos/archive/2009/07/05/4322449.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941076/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941076/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>&lt;br /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/305644440/passos/csdn.net/s.gif?r=http://blog.csdn.net/passos/archive/2009/07/05/4322449.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;&quot;/&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/305644440/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/305644440/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941076/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941076/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 05 Jul 2009 05:35:00 +0800</pubDate><author>刘金雨</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2009/07/05/4322449.aspx</guid><dc:creator>刘金雨</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2009/07/05/4322449.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330941076/5386560</fs:itemid></item><item><title>android path relative macro</title><link>http://blog.csdn.net/passos/archive/2009/05/13/4178314.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    
&lt;div style=&quot;font-size:14px;line-height:1.5em;&quot;&gt;
&lt;p&gt;defined in build/core/envsetup.mk&lt;/p&gt;

&lt;p&gt;BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE)/$(TARGET_BOOTLOADER_BOARD_NAME):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)&lt;/p&gt;
&lt;p&gt;TARGET_SIMULATOR = { true &amp;lt;null&amp;gt; }&lt;br /&gt;TARGET_BUILD_TYPE = { release debug }&lt;br /&gt;TARGET_PRODUCT := sim generic cdma_sholes umts_sholes&lt;br /&gt;TARGET_BUILD_VARIANT := user eng develop test&lt;br /&gt;TARGET_ARCH := arm x86&lt;br /&gt;TARGET_OS := linux&lt;/p&gt;
&lt;p&gt;ifeq ($(TARGET_SIMULATOR),true)&lt;br /&gt;&amp;nbsp; TARGET_PREBUILT_TAG := $(TARGET_OS)-$(TARGET_ARCH)&lt;br /&gt;&amp;nbsp; TARGET_PREBUILT_TAG := android-$(TARGET_ARCH)&lt;br /&gt;TARGET_OUT_ROOT_release := $(OUT_DIR)/target&lt;br /&gt;TARGET_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/target&lt;br /&gt;TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))&lt;/p&gt;
&lt;p&gt;ifeq ($(TARGET_SIMULATOR),true)&lt;br /&gt;&amp;nbsp; TARGET_PRODUCT_OUT_ROOT := $(HOST_OUT_$(TARGET_BUILD_TYPE))/product&lt;br /&gt;&amp;nbsp; TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product&lt;/p&gt;
&lt;p&gt;TARGET_COMMON_OUT_ROOT := $(TARGET_OUT_ROOT)/common&lt;br /&gt;PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)&lt;br /&gt;OUT_DOCS := $(TARGET_COMMON_OUT_ROOT)/docs&lt;/p&gt;
&lt;p&gt;TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj&lt;br /&gt;TARGET_OUT_HEADERS:= $(TARGET_OUT_INTERMEDIATES)/include&lt;br /&gt;TARGET_OUT_INTERMEDIATE_LIBRARIES := $(TARGET_OUT_INTERMEDIATES)/lib&lt;br /&gt;TARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj&lt;br /&gt;TARGET_OUT := $(PRODUCT_OUT)/system&lt;br /&gt;TARGET_OUT_EXECUTABLES:= $(TARGET_OUT)/bin&lt;br /&gt;TARGET_OUT_OPTIONAL_EXECUTABLES:= $(TARGET_OUT)/xbin&lt;br /&gt;TARGET_OUT_SHARED_LIBRARIES:= $(TARGET_OUT)/lib&lt;br /&gt;TARGET_OUT_JAVA_LIBRARIES:= $(TARGET_OUT)/framework&lt;br /&gt;TARGET_OUT_APPS:= $(TARGET_OUT)/app&lt;br /&gt;TARGET_OUT_KEYLAYOUT := $(TARGET_OUT)/usr/keylayout&lt;br /&gt;TARGET_OUT_KEYCHARS := $(TARGET_OUT)/usr/keychars&lt;br /&gt;TARGET_OUT_ETC := $(TARGET_OUT)/etc&lt;br /&gt;TARGET_OUT_STATIC_LIBRARIES:= $(TARGET_OUT_INTERMEDIATES)/lib&lt;br /&gt;TARGET_OUT_NOTICE_FILES:=$(TARGET_OUT_INTERMEDIATES)/NOTICE_FILES&lt;br /&gt;TARGET_OUT_DATA := $(PRODUCT_OUT)/data&lt;br /&gt;TARGET_OUT_DATA_EXECUTABLES:= $(TARGET_OUT_EXECUTABLES)&lt;br /&gt;TARGET_OUT_DATA_SHARED_LIBRARIES:= $(TARGET_OUT_SHARED_LIBRARIES)&lt;br /&gt;TARGET_OUT_DATA_JAVA_LIBRARIES:= $(TARGET_OUT_JAVA_LIBRARIES)&lt;br /&gt;TARGET_OUT_DATA_APPS:= $(TARGET_OUT_DATA)/app&lt;br /&gt;TARGET_OUT_DATA_KEYLAYOUT := $(TARGET_OUT_KEYLAYOUT)&lt;br /&gt;TARGET_OUT_DATA_KEYCHARS := $(TARGET_OUT_KEYCHARS)&lt;br /&gt;TARGET_OUT_DATA_ETC := $(TARGET_OUT_ETC)&lt;br /&gt;TARGET_OUT_DATA_STATIC_LIBRARIES:= $(TARGET_OUT_STATIC_LIBRARIES)&lt;br /&gt;TARGET_OUT_UNSTRIPPED := $(PRODUCT_OUT)/symbols&lt;br /&gt;TARGET_OUT_EXECUTABLES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/bin&lt;br /&gt;TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/lib&lt;br /&gt;TARGET_ROOT_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)&lt;br /&gt;TARGET_ROOT_OUT_SBIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/sbin&lt;br /&gt;TARGET_ROOT_OUT_BIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/bin&lt;br /&gt;TARGET_ROOT_OUT := $(PRODUCT_OUT)/root&lt;br /&gt;TARGET_ROOT_OUT_BIN := $(TARGET_ROOT_OUT)/bin&lt;br /&gt;TARGET_ROOT_OUT_SBIN := $(TARGET_ROOT_OUT)/sbin&lt;br /&gt;TARGET_ROOT_OUT_ETC := $(TARGET_ROOT_OUT)/etc&lt;br /&gt;TARGET_ROOT_OUT_USR := $(TARGET_ROOT_OUT)/usr&lt;br /&gt;TARGET_RECOVERY_OUT := $(PRODUCT_OUT)/recovery&lt;br /&gt;TARGET_RECOVERY_ROOT_OUT := $(TARGET_RECOVERY_OUT)/root&lt;br /&gt;TARGET_SYSLOADER_OUT := $(PRODUCT_OUT)/sysloade&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/330941104/log4life/feedsky/s.gif?r=http://blog.csdn.net/passos/archive/2009/05/13/4178314.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941104/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941104/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>android path relative macro&lt;img src=&quot;http://www1.feedsky.com/t1/305644441/passos/csdn.net/s.gif?r=http://blog.csdn.net/passos/archive/2009/05/13/4178314.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;&quot;/&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/305644441/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/305644441/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941104/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941104/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 13 May 2009 18:15:00 +0800</pubDate><author>刘金雨</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2009/05/13/4178314.aspx</guid><dc:creator>刘金雨</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2009/05/13/4178314.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330941104/5386560</fs:itemid></item><item><title>android transform macro</title><link>http://blog.csdn.net/passos/archive/2009/05/13/4178294.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    &lt;p&gt;defined in build/core/definitions.mk&lt;/p&gt;

&lt;p&gt;transform-aidl-to-java&lt;br /&gt;transform-classes.jar-to-dex&lt;br /&gt;transform-classes.jar-to-emma&lt;br /&gt;transform-c-or-s-to-o-no-deps&lt;br /&gt;transform-cpp-to-o&lt;br /&gt;transform-c-to-o&lt;br /&gt;transform-c-to-o-no-deps&lt;br /&gt;transform-d-to-p&lt;br /&gt;transform-generated-source&lt;br /&gt;transform-host-c-or-s-to-o-no-deps&lt;br /&gt;transform-host-cpp-to-o&lt;br /&gt;transform-host-c-to-o&lt;br /&gt;transform-host-c-to-o-no-deps&lt;br /&gt;transform-host-java-to-package&lt;br /&gt;transform-host-o-to-executable&lt;br /&gt;transform-host-o-to-executable-inner&lt;br /&gt;transform-host-o-to-package&lt;br /&gt;transform-host-o-to-shared-lib&lt;br /&gt;transform-host-o-to-shared-lib-inner&lt;br /&gt;transform-host-o-to-static-lib&lt;br /&gt;transform-host-ranlib-copy-hack&lt;br /&gt;transform-host-s-to-o&lt;br /&gt;transform-host-s-to-o-no-deps&lt;br /&gt;transform-java-to-classes.jar&lt;br /&gt;transform-l-to-cpp&lt;br /&gt;transform-o-to-executable&lt;br /&gt;transform-o-to-executable-inner&lt;br /&gt;transform-o-to-package&lt;br /&gt;transform-o-to-shared-lib&lt;br /&gt;transform-o-to-shared-lib-inner&lt;br /&gt;transform-o-to-static-executable&lt;br /&gt;transform-o-to-static-executable-inner&lt;br /&gt;transform-o-to-static-lib&lt;br /&gt;transform-prebuilt-to-target&lt;br /&gt;transform-ranlib-copy-hack&lt;br /&gt;transform-s-to-o&lt;br /&gt;transform-s-to-o-no-deps&lt;br /&gt;transform-to-prelinked&lt;br /&gt;transform-to-stripped&lt;br /&gt;transform-variables&lt;br /&gt;transform-y-to-cpp&lt;/p&gt;

&lt;p&gt;copy-file-to-new-target&lt;br /&gt;copy-file-to-new-target-with-cp&lt;br /&gt;copy-file-to-target&lt;br /&gt;copy-file-to-target-with-cp&lt;/p&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/330941275/log4life/feedsky/s.gif?r=http://blog.csdn.net/passos/archive/2009/05/13/4178294.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941275/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941275/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>defined in build/core/definitions.mktransform-aidl-to-javatransform-classes.jar-to-dextransform-classes.jar-to-emmatransform-c-or-s-to-o-no-depstransform-cpp-to-otransform-c-to-otransform-c-to-o-no-depstransform-d-to-ptransform-generated-sourcetransform-host-c-or-s-to-o-no-depstransform-host-cpp-to-otransform-host-c-to-otransform-host-c-to-o-no-depstransform-host-java-to-packagetransform-host-o&lt;img src=&quot;http://www1.feedsky.com/t1/305644442/passos/csdn.net/s.gif?r=http://blog.csdn.net/passos/archive/2009/05/13/4178294.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;&quot;/&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/305644442/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/305644442/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941275/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941275/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 13 May 2009 18:13:00 +0800</pubDate><author>刘金雨</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2009/05/13/4178294.aspx</guid><dc:creator>刘金雨</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2009/05/13/4178294.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330941275/5386560</fs:itemid></item><item><title>为什么cpio要比tar好</title><link>http://blog.csdn.net/passos/archive/2009/02/10/3872534.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    &lt;p&gt;为什么cpio比tar好？有这样几个原因。&lt;br /&gt;1、cpio会保留硬连接（hard link），备份的时候这个很重要&lt;br /&gt;2、cpio没有文件名长度的限制。确实，guntar在这一点上做过改进，允许使用长文件名（实际上是创建了一个临时文件用来保存实际的文件名），但是在非gnu的tar工具上仍然存在这个问题。&lt;br /&gt;3、默认情况下，cpio保留时间戳&lt;br /&gt;4、在编写脚本的时候，cpio可以更好的控制要操作哪些文件。因为cpio需要显式的制定要操作的文件列表，例如下面哪个更加容易理解？&lt;br /&gt;&lt;textarea cols=&quot;73&quot; rows=&quot;3&quot; name=&quot;code&quot; class=&quot;cpp&quot;&gt;find . -type f -name '*.sh' -print | cpio -o | gzip &amp;gt;sh.cpio.gz&lt;/textarea&gt; &lt;/p&gt;
&lt;p&gt;或者在Solaris上：&lt;br /&gt;&lt;textarea cols=&quot;73&quot; rows=&quot;3&quot; name=&quot;code&quot; class=&quot;c-sharp&quot;&gt;find . -type f -name '*.sh' -print &amp;gt;/tmp/includeme
tar -cf - . -I /tmp/includeme | gzip &amp;gt;sh.tar.gz&lt;/textarea&gt; &lt;/p&gt;
&lt;p&gt;或者用gnutar：&lt;br /&gt;&lt;textarea cols=&quot;74&quot; rows=&quot;3&quot; name=&quot;code&quot; class=&quot;c-sharp&quot;&gt;find . -type f -name '*.sh' -print &amp;gt;/tmp/includeme
tar -cf - . --files-from=/tmp/includeme | gzip &amp;gt;sh.tar.gz&lt;/textarea&gt; &lt;/p&gt;
&lt;p&gt;这儿有一个需要特别注意的：对于包含大量文件的列表，不能将find放在反引号（`）内，因为命令行长度会超出长度限制，因此必须使用中间文件。find和tar分开跑很明显会使得速度减慢。&lt;/p&gt;
&lt;p&gt;下面这个例子更加复杂，将一部分文件打包到一个文件中，其它部分打包到另外一个文件中：&lt;/p&gt;
&lt;p&gt;&lt;textarea cols=&quot;73&quot; rows=&quot;3&quot; name=&quot;code&quot; class=&quot;c-sharp&quot;&gt;find . -depth -print &amp;gt;/tmp/files
egrep    '&amp;#92;.sh$' /tmp/files | cpio -o | gzip &amp;gt;with.cpio.gz
egrep -v '&amp;#92;.sh$' /tmp/files | cpio -o | gzip &amp;gt;without.cpio.gz&lt;/textarea&gt; &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;在 Solaris 下: &lt;br /&gt;&lt;textarea cols=&quot;73&quot; rows=&quot;5&quot; name=&quot;code&quot; class=&quot;c-sharp&quot;&gt;find . -depth -print &amp;gt;/tmp/files
egrep    '&amp;#92;.sh$' /tmp/files &amp;gt;/tmp/with
tar -cf - . -I /tmp/with    | gzip &amp;gt;with.tar.gz
tar -cf - .    /tmp/without | gzip &amp;gt;without.tar.gz&lt;/textarea&gt; &lt;/p&gt;
&lt;p&gt;使用 gnutar: &lt;br /&gt;&lt;textarea cols=&quot;73&quot; rows=&quot;4&quot; name=&quot;code&quot; class=&quot;c-sharp&quot;&gt;find . -depth -print &amp;gt;/tmp/files
egrep    '&amp;#92;.sh$' /tmp/files &amp;gt;/tmp/with
tar -cf - . -I /tmp/with    | gzip &amp;gt;with.tar.gz
tar -cf - . -X /tmp/without | gzip &amp;gt;without.tar.gz&lt;/textarea&gt; &lt;/p&gt;
&lt;p&gt;同样的，find和tar分开跑会使得速度变慢。创建多个中间文件也搞出了更多的混乱。gnutar稍好些，但是它的命令行参数却是不兼容的。&lt;/p&gt;
&lt;p&gt;5、如果有很多文件需要通过网络在两台机器之间复制，则可以并行的跑几个cpio。例如：&lt;/p&gt;
&lt;p&gt;&lt;textarea cols=&quot;73&quot; rows=&quot;8&quot; name=&quot;code&quot; class=&quot;c-sharp&quot;&gt;find . -depth -print &amp;gt;/tmp/files
split /tmp/files
for F in /tmp/files?? ; do
 cat $F | cpio -o | ssh destination &quot;cd /target &amp;amp;&amp;amp; cpio -idum&quot; &amp;amp;
 done&lt;/textarea&gt; &lt;/p&gt;
&lt;p&gt;注意，如果能够将输入平均分成几个部分来进行并行处理会更好。&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941332/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941332/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>为什么cpio比tar好？有这样几个原因。
1、cpio会保留硬连接
2、cpio没有文件名长度的限制
3、默认情况下，cpio保留时间戳
4、在编写脚本的时候，cpio可以更好的控制要操作哪些文件&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/305644443/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/305644443/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941332/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941332/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 10 Feb 2009 08:07:00 +0800</pubDate><author>刘金雨</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2009/02/10/3872534.aspx</guid><dc:creator>刘金雨</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2009/02/10/3872534.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330941332/5386560</fs:itemid></item><item><title>ThoughtWorks 的一道笔试题</title><link>http://blog.csdn.net/passos/archive/2008/12/11/3498521.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    &lt;p&gt;&lt;font face=&quot;Arial&quot; size=&quot;2&quot;&gt;PROBLEM ONE: TRAINS&lt;br&gt;&lt;br&gt;Problem: &amp;nbsp;The local commuter railroad services a number of towns in Kiwiland. &amp;nbsp;Because of monetary concerns, all of the tracks are 'one-way.' &amp;nbsp;That is, a route from Kaitaia to Invercargill does not imply the existence of a route from Invercargill to Kaitaia. &amp;nbsp;In fact, even if both of these routes do happen to exist, they are distinct and are not necessarily the same distance!&lt;br&gt;&lt;br&gt;The purpose of this problem is to help the railroad provide its customers with information about the routes. &amp;nbsp;In particular, you will compute the distance along a certain route, the number of different routes between two towns, and the shortest route between two towns.&lt;br&gt;&lt;br&gt;Input: &amp;nbsp;A directed graph where a node represents a town and an edge represents a route between two towns. &amp;nbsp;The weighting of the edge represents the distance between the two towns. &amp;nbsp;A given route will never appear more than once, and for a given route, the starting and ending town will not be the same town.&lt;br&gt;&lt;br&gt;Output: For test input 1 through 5, if no such route exists, output 'NO SUCH ROUTE'. &amp;nbsp;Otherwise, follow the route as given; do not make any extra stops! &amp;nbsp;For example, the first problem means to start at city A, then travel directly to city B (a distance of 5), then directly to city C (a distance of 4).&lt;br&gt;&lt;br&gt;1. The distance of the route A-B-C.&lt;br&gt;2. The distance of the route A-D.&lt;br&gt;3. The distance of the route A-D-C.&lt;br&gt;4. The distance of the route A-E-B-C-D.&lt;br&gt;5. The distance of the route A-E-D.&lt;br&gt;6. The number of trips starting at C and ending at C with a maximum of 3 stops. &amp;nbsp;In the sample data below, there are two such trips: C-D-C (2 stops). and C-E-B-C (3 stops).&lt;br&gt;7. The number of trips starting at A and ending at C with exactly 4 stops. &amp;nbsp;In the sample data below, there are three such trips: A to C (via B,C,D); A to C (via D,C,D); and A to C (via D,E,B).&lt;br&gt;8. The length of the shortest route (in terms of distance to travel) from A to C.&lt;br&gt;9. The length of the shortest route (in terms of distance to travel) from B to B.&lt;br&gt;10. The number of different routes from C to C with a distance of less than 30. &amp;nbsp;In the sample data, the trips are: CDC, CEBC, CEBCDC, CDCEBC, CDEBC, CEBCEBC, CEBCEBCEBC. &lt;br&gt;&lt;br&gt;Test Input:&lt;br&gt;&lt;br&gt;For the test input, the towns are named using the first few letters of the alphabet from A to D. &amp;nbsp;A route between two towns (A to B) with a distance of 5 is represented as AB5.&lt;br&gt;&lt;br&gt;Graph: AB5, BC4, CD8, DC8, DE6, AD5, CE2, EB3, AE7&lt;br&gt;&lt;br&gt;Expected Output:&lt;br&gt;&lt;br&gt;Output #1: 9&lt;br&gt;Output #2: 5&lt;br&gt;Output #3: 13&lt;br&gt;Output #4: 22&lt;br&gt;Output #5: NO SUCH ROUTE&lt;br&gt;Output #6: 2&lt;br&gt;Output #7: 3&lt;br&gt;Output #8: 9&lt;br&gt;Output #9: 9&lt;br&gt;Output #10: 7&lt;br&gt;========== &lt;/font&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;简单来说，就是一个图的搜索问题。用数组来表示图，简化之后大致的解决方案都差不多。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;6:&lt;/p&gt;
&lt;div class=&quot;highlighter&quot;&gt;
&lt;ol class=&quot;highlighter-j&quot;&gt;
&lt;li&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Graphmain&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;[][]&amp;nbsp;map&amp;nbsp;=&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;7&lt;/span&gt;&lt;span&gt;},&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;6&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;dfs(String&amp;nbsp;end,&amp;nbsp;String&amp;nbsp;path,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;maxLength)&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(path.length()&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;maxLength)&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&amp;nbsp;path.length()&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;path.endsWith(end)&amp;nbsp;)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(path&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;,&amp;nbsp;&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;+&amp;nbsp;path.length());&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;lastChar&amp;nbsp;=&amp;nbsp;path.charAt(path.length()-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;lastNodeIndex&amp;nbsp;=&amp;nbsp;lastChar&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;'A'&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;i=&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;;&amp;nbsp;i&amp;lt;map[lastNodeIndex].length;&amp;nbsp;i++&amp;nbsp;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;newChar&amp;nbsp;=&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;)(i&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;'A'&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&amp;nbsp;map[lastNodeIndex][i]&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dfs(end,&amp;nbsp;path&amp;nbsp;+&amp;nbsp;newChar,&amp;nbsp;maxLength);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Graphmain&amp;nbsp;g&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Graphmain();&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.dfs(&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
&lt;p&gt;7:&lt;/p&gt;
&lt;div class=&quot;highlighter&quot;&gt;
&lt;ol class=&quot;highlighter-j&quot;&gt;
&lt;li&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Graphmain&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;[][]&amp;nbsp;map&amp;nbsp;=&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;7&lt;/span&gt;&lt;span&gt;&amp;nbsp;},&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;nbsp;},&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;&lt;span&gt;&amp;nbsp;},&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;6&lt;/span&gt;&lt;span&gt;&amp;nbsp;},&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;bfs(String&amp;nbsp;start,&amp;nbsp;String&amp;nbsp;end,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;hops)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;lastRoute&amp;nbsp;=&amp;nbsp;start;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;hop&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;;&amp;nbsp;hop&amp;nbsp;&amp;lt;&amp;nbsp;hops;&amp;nbsp;hop++)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;route&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;lastRoute.length();&amp;nbsp;i++)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;c&amp;nbsp;=&amp;nbsp;lastRoute.charAt(i);&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;id&amp;nbsp;=&amp;nbsp;c&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;'A'&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;j&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;;&amp;nbsp;j&amp;nbsp;&amp;lt;&amp;nbsp;map[id].length;&amp;nbsp;j++)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(map[id][j]&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;route&amp;nbsp;=&amp;nbsp;route&amp;nbsp;+&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;)&amp;nbsp;(j&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;'A'&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(lastRoute); &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lastRoute&amp;nbsp;=&amp;nbsp;route;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(lastRoute); &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(lastRoute.split(end).length&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Graphmain&amp;nbsp;g&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Graphmain();&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.bfs(&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
&lt;p&gt;8/9:&lt;/p&gt;
&lt;div class=&quot;highlighter&quot;&gt;
&lt;ol class=&quot;highlighter-j&quot;&gt;
&lt;li&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Graphmain&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;[][]&amp;nbsp;map&amp;nbsp;=&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;7&lt;/span&gt;&lt;span&gt;},&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;6&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;dfs(String&amp;nbsp;end,&amp;nbsp;String&amp;nbsp;path,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;cost)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(path.endsWith(end)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;cost&amp;nbsp;&amp;lt;&amp;nbsp;bestCost&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;cost&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bestPath&amp;nbsp;=&amp;nbsp;path;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bestCost&amp;nbsp;=&amp;nbsp;cost;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;lastChar&amp;nbsp;=&amp;nbsp;path.charAt(path.length()&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;lastNodeIndex&amp;nbsp;=&amp;nbsp;lastChar&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;'A'&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;map[lastNodeIndex].length;&amp;nbsp;i++)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;newChar&amp;nbsp;=&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;)&amp;nbsp;(i&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;'A'&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;newCost&amp;nbsp;=&amp;nbsp;map[lastNodeIndex][i];&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(newCost&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(path.indexOf(newChar)&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;continue&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dfs(end,&amp;nbsp;path&amp;nbsp;+&amp;nbsp;newChar,&amp;nbsp;cost&amp;nbsp;+&amp;nbsp;newCost);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;String&amp;nbsp;bestPath&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;bestCost&amp;nbsp;=&amp;nbsp;Integer.MAX_VALUE;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Graphmain&amp;nbsp;g&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Graphmain();&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.dfs(&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;8&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.dfs(&quot;B&quot;,&amp;nbsp;&quot;B&quot;,&amp;nbsp;0);&amp;nbsp;//&amp;nbsp;9 &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;Best&amp;nbsp;Path:&amp;nbsp;&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;+&amp;nbsp;g.bestPath&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;&amp;#92;nCost:&amp;nbsp;&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;+&amp;nbsp;g.bestCost);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
&lt;p&gt;10:&lt;/p&gt;
&lt;div class=&quot;highlighter&quot;&gt;
&lt;ol class=&quot;highlighter-j&quot;&gt;
&lt;li&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Graphmain&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;[][]&amp;nbsp;map&amp;nbsp;=&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;7&lt;/span&gt;&lt;span&gt;},&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;6&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;-&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;dfs(String&amp;nbsp;end,&amp;nbsp;String&amp;nbsp;path,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;cost)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(cost&amp;nbsp;&amp;gt;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;30&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(cost&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;path.endsWith(end))&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(path&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;,&amp;nbsp;&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;+&amp;nbsp;cost);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;lastChar&amp;nbsp;=&amp;nbsp;path.charAt(path.length()&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;lastNodeIndex&amp;nbsp;=&amp;nbsp;lastChar&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;'A'&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;map[lastNodeIndex].length;&amp;nbsp;i++)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;newChar&amp;nbsp;=&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt;&lt;span&gt;)&amp;nbsp;(i&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;'A'&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;newCost&amp;nbsp;=&amp;nbsp;map[lastNodeIndex][i];&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(newCost&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dfs(end,&amp;nbsp;path&amp;nbsp;+&amp;nbsp;newChar,&amp;nbsp;cost&amp;nbsp;+&amp;nbsp;newCost);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Graphmain&amp;nbsp;g&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Graphmain();&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.dfs(&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941338/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941338/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>&lt;br /&gt;PROBLEM ONE: TRAINS&lt;br /&gt;&lt;br /&gt;Problem: The local commuter railroad services a number of towns in Kiwiland. Because of monetary concerns, all of the tracks are 'one-way.' That is, a route from Kaitaia to Invercargill does not imply the existence of a route from Invercargill to Kaitaia. In fact, even if both of these routes do happen to exist, they are distinct and are not necessarily the same distance!&lt;br /&gt;&lt;br /&gt;The purpose of this problem is to help the railroad provide its customers&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/305644444/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/305644444/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941338/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941338/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 11 Dec 2008 15:30:00 +0800</pubDate><author>古月春秋</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2008/12/11/3498521.aspx</guid><dc:creator>古月春秋</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2008/12/11/3498521.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330941338/5386560</fs:itemid></item><item><title>Android源码构建工具速览（二）—— 清单文件</title><link>http://blog.csdn.net/passos/archive/2008/10/25/3143095.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    &lt;p&gt;&amp;nbsp;上回已经简单的在本地构造了一个Android的源码库，这回来看看这个源码库是如何构造出来的。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;这一切其实都是基于那个名为repo的构造工具。回到最开始的命令 $ curl &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://android.git.kernel.org/repo&quot;&gt;http://android.git.kernel.org/repo&lt;/a&gt; &amp;gt; ~/bin/repo&lt;br&gt;这个命令从网站上下载了一个名为repo的脚本，它实际上是段python的代码，这个代码仔细看看还是有点意思的。它其实是整个构建工具的一小部分代码，而这一小部分的代码的功能主要就是去下载自身其它的代码，并初始化构建环境。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;在运行这个工具的时候，它首先会去检查当前目录下的.repo目录，然后从脚本内置的（或命令行指定的）一个地址 git://android.kernel.org/tools/repo.git 去使用git clone一份最新的repo工具的完整的版本库放置到 .repo/repo 目录下，之后checkout出最新的代码。这些代码就是repo的其它部分的代码。这其中的 main.py 就是repo构建工具的主干入口代码。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;而在之前的构造过程中的调用命令 $ repo init -u git://android.git.kernel.org/platform/manifest.git 中，repo首先完成了前面所说的对自身的更新和初始化，然后通过调用后面补充进来的代码完成init的操作。在这个操作中， repo从 git://android.git.kernel.org/platform/manifest.git 这个地址下载了一份整个源码仓库的清单的版本库，并checkout出一份最新的清单，即 .repo/manifests/default.xml 文件。该文件是一个xml文件，在这个文件中描述了获取代码的远程版本库地址、其中所涉及到的每个项目的地址等等。下面是其中一部分：&lt;/p&gt;
&lt;div class=&quot;highlighter&quot;&gt;
&lt;ol class=&quot;highlighter-xml&quot;&gt;
&lt;li&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;manifest&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;branch&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;master&quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;remote&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;korg&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;fetch&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;git://android.git.kernel.org/&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;review&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;review.source.android.com&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;project&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;path&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;bionic&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;platform/bionic&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;project&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;path&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;external/clearsilver&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;platform/external/clearsilver&quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;remap&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;strip&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;clearsilver-%version%/&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;mirror&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;http://android.git.kernel.org/pub/clearsilver-%version%.tar.gz&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;snapshot&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;0.10.5&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;check&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;ec5fff5d7367ddd29a619cf81ae264687fde94c8&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;project&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;...&amp;nbsp;...&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;manifest&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
&lt;p&gt;这里只是截取了其中一小部分的片段用来说明问题。&lt;/p&gt;
&lt;p&gt;remote节点的fetch属性描述了远程的版本库的基本地址，之后是一系列的project节点。每一个project节点都有一个path和name属性，path是该项目在本地的存储地址，如bionic则是存储在本地的 ./repo/projects/bionic 下面，而name属性是远程版本库中的路径，与remote的fetch的地址结合起来即可得到该项目的版本库地址，如bionic的版本库是在 git://android.git.kernel.org/platform/bionic &lt;/p&gt;
&lt;p&gt;&lt;br&gt;而有的project定义中有import节点，该import节点中定义的一般都是该项目所依赖的第三方的独立项目，这些项目是没有历史版本信息的，因此只是一个tar.gz的包。repo在同步的过程中会将其下载下来，解压、加入到该项目的版本库中，并打上一个tag标记。&lt;/p&gt;
&lt;p&gt;通过这个清单文件，repo可以实现整个源码库的随时更新和同步，这也是基于git的版本控制的特性所带来的独特的优势。&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941427/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941427/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>上回已经简单的在本地构造了一个Android的源码库，这回来看看这个源码库是如何构造出来的。这一切其实都是基于那个名为repo的构造工具。回到最开始的命令 $ curl http://android.git.kernel.org/repo &amp;gt; ~/bin/repo
这个命令从网站上下载了一个名为repo的脚本，它实际上是段python的代码，这个代码仔细看看还是有点意思的。它其实是整个构建工具的一小部分代码，而这一小部分的代码的功能主要就是去下载自身其它的代码，并初始化构建环境。&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/305644445/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/305644445/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941427/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941427/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sat, 25 Oct 2008 15:11:00 +0800</pubDate><author>古月春秋</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2008/10/25/3143095.aspx</guid><dc:creator>古月春秋</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2008/10/25/3143095.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330941427/5386560</fs:itemid></item><item><title>Android源码构建工具速览（一）——构造源码库</title><link>http://blog.csdn.net/passos/archive/2008/10/25/3142974.aspx</link><content:encoded>&lt;div class=&quot;blogstory&quot;&gt;

                    

                    

                    &lt;p&gt;随着第一款Android的手机上市，Google也终于发布了其Android的源码。通常情况下，一个开源项目的发布都是伴随着一个巨大的完整的xxx-src.tar.gz的源码包，然后解压、configure/make即可。而Android是基于传说中的Git来管理的，在发布方面自然也有所不同，它基于Git构造了一个可以随时同步更新的源码库。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;从 &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://source.android.com/download&quot;&gt;http://source.android.com/download&lt;/a&gt; 可以找到一段简单的下载源码的介绍。大致情况是，首先要在Linux或者MacO的系统下操作，其次要保证Git的版本在1.5.4之上，Python的版本在2.4之上。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;先做一个小准备，在个人home目录下建立一个bin目录，并加入到PATH环境变量中&lt;br&gt;$ mkdir ~/bin&lt;br&gt;$ export PATH=$HOME/bin:$PATH&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;要下载其源码，先要安装一个Android的构建工具 repo。&lt;br&gt;$ curl &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://android.git.kernel.org/repo&quot;&gt;http://android.git.kernel.org/repo&lt;/a&gt; &amp;gt; ~/bin/repo &lt;br&gt;$ chmod a+x ~/bin/repo&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;然后再建立一个存放源码的目录&lt;br&gt;$ mkdir ~/android ; cd ~/android&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;之后使用这个repo工具，来初始化这个源码仓库：&lt;br&gt;$ repo init -u git://android.git.kernel.org/platform/manifest.git&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;片刻等待之后，仓库初始化完成。此时，这个仓库只是更新了repo这个构建工具本身，并下载了整个Android源码仓库的一个清单的版本库，在~/android/.repo下面能够看到这些文件。其中 ~/android/.repo/repo 目录是构建工具的全部代码，基于Python写成，稍后再看。 其次是 ~/android/.repo/manifests/default.xml文件，这个是整个Android源码库的清单文件，之后repo这个工具会根据这个清单依次下载所有的代码。而~/android/.repo/manifest.git则是这个清单文件的版本库 :) 。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Git有一个有意思的特性，就是可以制定存放版本库版本信息的目录的位置，因而可以将存放版本信息的目录和实际的项目文件放置于不同的目录下，而不是像以前的cvs或者Subversion一样在每一个目录下都有一个讨厌的.xxx隐藏目录。这也从某种程度上减少了冗余信息。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;经过上述步骤之后，可以开始进行源码仓库的下载了，对于repo来说，称之为“同步”——sync。&lt;/p&gt;
&lt;p&gt;$ repo sync&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;下载过程中随时可以终断，中断后重新执行同步即可更新到最新的源码仓库。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941479/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941479/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><description>随着第一款Android的手机上市，Google也终于发布了其Android的源码。通常情况下，一个开源项目的发布都是伴随着一个巨大的完整的xxx-src.tar.gz的源码包，然后解压、configure/make即可。而Android是基于传说中的Git来管理的，在发布方面自然也有所不同，它基于Git构造了一个可以随时同步更新的源码库。&lt;p class=&quot;fswww1&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www1.feedsky.com/r/l/csdn.net/passos/305644446/art01.html&quot;&gt;&lt;img border=&quot;0&quot; ismap src=&quot;http://www1.feedsky.com/r/i/csdn.net/passos/305644446/art01.gif&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/log4life/330941479/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/log4life/330941479/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sat, 25 Oct 2008 14:18:00 +0800</pubDate><author>古月春秋</author><guid isPermaLink="false">http://blog.csdn.net/passos/archive/2008/10/25/3142974.aspx</guid><dc:creator>古月春秋</dc:creator><fs:srclink>http://blog.csdn.net/passos/archive/2008/10/25/3142974.aspx</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e440150b8937153a9ad492a0db8202cc&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/log4life/~7277025/330941479/5386560</fs:itemid></item></channel></rss>