Six Degrees

Six degrees of separation is the theory that everyone and everything is six or fewer steps away, by way of introduction, from any other person in the world, so that a chain of "a friend of a friend" statements can be made to connect any two people in a maximum of six steps.

Given a friendship relations, find the degrees of two people, return -1 if they can not been connected by friends of friends.

Example
Gien a graph:

1------2-----4
? \ ? ? ? ? ? ? /
? ? \ ? ? ? ? /
? ?? \--3--/
{1,2,3#2,1,4#3,1,4#4,2,3} and s = 1, t = 4 return 2

Gien a graph:

1 2-----4
? ? ? ? ? /
? ? ? ? /
? ? ? 3
{1#2,4#3,4#4,2,3} and s = 1, t = 4 return -1

這道題的degreeFromSource不僅用來記錄節(jié)點到source的距離,同時也可以用來記錄是否訪問。因為無向圖里計算某個節(jié)點到source的距離只需要訪問一次圣蝎,不能重復(fù)計算稠曼。

/**
 * Definition for Undirected graph.
 * class UndirectedGraphNode {
 *     int label;
 *     List<UndirectedGraphNode> neighbors;
 *     UndirectedGraphNode(int x) { 
 *         label = x;
 *         neighbors = new ArrayList<UndirectedGraphNode>(); 
 *     }
 * };
 */
public class Solution {
    /**
     * @param graph a list of Undirected graph node
     * @param s, t two Undirected graph nodes
     * @return an integer
     */
    public int sixDegrees(List<UndirectedGraphNode> graph,
                          UndirectedGraphNode s,
                          UndirectedGraphNode t) {
        // Write your code here
        if (graph == null || s == t || graph.size() == 0){
            return 0;
        }
        Map<UndirectedGraphNode, Integer> degreeFromSource = new HashMap<>();
        Queue<UndirectedGraphNode> queue = new LinkedList<>();
        degreeFromSource.put(s,0);
        queue.offer(s);
        while (!queue.isEmpty()){
            UndirectedGraphNode curt = queue.poll();
            for (UndirectedGraphNode nei : curt.neighbors){
                if (degreeFromSource.containsKey(nei)){
                    continue;
                }
                degreeFromSource.put(nei, degreeFromSource.get(curt) + 1);
                if (nei == t){
                    return degreeFromSource.get(curt) + 1;
                }
                queue.offer(nei);
            }
        }
        return -1;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宛逗,一起剝皮案震驚了整個濱河市逻翁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矛缨,老刑警劉巖斯辰,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舶担,死亡現(xiàn)場離奇詭異,居然都是意外死亡彬呻,警方通過查閱死者的電腦和手機衣陶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闸氮,“玉大人剪况,你說我怎么就攤上這事∑芽纾” “怎么了译断?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長或悲。 經(jīng)常有香客問我孙咪,道長堪唐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任翎蹈,我火速辦了婚禮淮菠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荤堪。我一直安慰自己合陵,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布澄阳。 她就那樣靜靜地躺著曙寡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寇荧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天执隧,我揣著相機與錄音揩抡,去河邊找鬼。 笑死镀琉,一個胖子當(dāng)著我的面吹牛峦嗤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屋摔,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼烁设,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钓试?” 一聲冷哼從身側(cè)響起装黑,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弓熏,沒想到半個月后恋谭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡挽鞠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年疚颊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片信认。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡材义,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫁赏,到底是詐尸還是另有隱情其掂,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布潦蝇,位于F島的核電站清寇,受9級特大地震影響喘漏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜华烟,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一翩迈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盔夜,春花似錦负饲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椭微,卻和暖如春洞坑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝇率。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工迟杂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人本慕。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓排拷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锅尘。 傳聞我的和親對象是個殘疾皇子监氢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容