<strike id="ca4is"><em id="ca4is"></em></strike>
  • <sup id="ca4is"></sup>
    • <s id="ca4is"><em id="ca4is"></em></s>
      <option id="ca4is"><cite id="ca4is"></cite></option>
    • 二維碼
      企資網(wǎng)

      掃一掃關(guān)注

      當(dāng)前位置: 首頁(yè) » 企資快報(bào) » 精準(zhǔn) » 正文

      2022_11_04_給定一個(gè)正數(shù)n_表示有多

      放大字體  縮小字體 發(fā)布日期:2022-11-29 14:49:06    作者:葉承宇    瀏覽次數(shù):62
      導(dǎo)讀

      2022-11-04:給定一個(gè)正數(shù)n,表示有多少個(gè)節(jié)點(diǎn)給定一個(gè)二維數(shù)組edges,表示所有無(wú)向邊edges[i] = {a, b} 表示a到b有一條無(wú)向邊edges一定表示得是一個(gè)無(wú)環(huán)無(wú)向圖,也就是樹結(jié)構(gòu)每個(gè)節(jié)點(diǎn)可以染1、2、3三種顏色。要求 :

      2022-11-04:給定一個(gè)正數(shù)n,表示有多少個(gè)節(jié)點(diǎn)

      給定一個(gè)二維數(shù)組edges,表示所有無(wú)向邊

      edges[i] = {a, b} 表示a到b有一條無(wú)向邊

      edges一定表示得是一個(gè)無(wú)環(huán)無(wú)向圖,也就是樹結(jié)構(gòu)

      每個(gè)節(jié)點(diǎn)可以染1、2、3三種顏色。

      要求 : 非葉節(jié)點(diǎn)得相鄰點(diǎn)一定要至少有兩種和自己不同顏色得點(diǎn)。

      返回一種達(dá)標(biāo)得染色方案,也就是一個(gè)數(shù)組,表示每個(gè)節(jié)點(diǎn)得染色狀況。

      1 <= 節(jié)點(diǎn)數(shù)量 <= 10得5次方。

      來(lái)自米哈游。

      答案2022-11-04:

      生成圖,選一個(gè)頭節(jié)點(diǎn),深度優(yōu)先染色。

      代碼用rust編寫。代碼如下:

      use std::{iter::repeat, vec};use rand::Rng;fn main() { let nn: i32 = 100; let test_time: i32 = 1000; println!("測(cè)試開始"); for i in 0..test_time { let n = rand::thread_rng().gen_range(0, nn) + 1; let mut edges = random_edges(n); let mut ans = dye(n, &mut edges); if !right_answer(n, &mut edges, &mut ans) { println!("出錯(cuò)了!{}", i); break; } } println!("測(cè)試結(jié)束");}// 1 2 3 1 2 3 1 2 3const RULE1: [i32; 3] = [1, 2, 3];// // 1 3 2 1 3 2 1 3 2const RULE2: [i32; 3] = [1, 3, 2];fn dye(n: i32, edges: &mut Vec<Vec<i32>>) -> Vec<i32> { let mut graph: Vec<Vec<i32>> = vec![]; // 0 : { 2, 1 } // 1 : { 0 } // 2 : { 0 } for _i in 0..n { graph.push(vec![]); } for edge in edges.iter() { // 0 -> 2 // 1 -> 0 graph[edge[0] as usize].push(edge[1]); graph[edge[1] as usize].push(edge[0]); } // 選一個(gè)頭節(jié)點(diǎn)! let mut head = -1; for i in 0..n { if graph[i as usize].len() >= 2 { head = i; break; } } // graph // head let mut colors: Vec<i32> = repeat(0).take(n as usize).collect(); if head == -1 { // 兩個(gè)點(diǎn),互相連一下 // 把colors,所有位置,都設(shè)置成1 colors = repeat(1).take(n as usize).collect(); } else { // dfs 染色了! colors[head as usize] = 1; let h = graph[head as usize][0]; dfs(&mut graph, h, 1, &RULE1, &mut colors); for i in 1..graph[head as usize].len() as i32 { let h = graph[head as usize][i as usize]; dfs(&mut graph, h, 1, &RULE2, &mut colors); } } return colors;}// 整個(gè)圖結(jié)構(gòu),都在graph// 當(dāng)前來(lái)到得節(jié)點(diǎn),是head號(hào)節(jié)點(diǎn)// head號(hào)節(jié)點(diǎn),在level層// 染色得規(guī)則,rule {1,2,3...} {1,3,2...}// 做得事情:以head為頭得整顆樹,每個(gè)節(jié)點(diǎn),都染上顏色// 填入到colors數(shù)組里去fn dfs(graph: &mut Vec<Vec<i32>>, head: i32, level: i32, rule: &[i32; 3], colors: &mut Vec<i32>) { colors[head as usize] = rule[(level % 3) as usize]; for next in graph[head as usize].clone().iter() { if colors[*next as usize] == 0 { dfs(graph, *next, level + 1, rule, colors); } }}// 為了測(cè)試// 生成無(wú)環(huán)無(wú)向圖fn random_edges(n: i32) -> Vec<Vec<i32>> { let mut order: Vec<i32> = repeat(0).take(n as usize).collect(); for i in 0..n { order[i as usize] = i; } let mut i = n - 1; while i >= 0 { order.swap(i as usize, rand::thread_rng().gen_range(0, i + 1) as usize); i -= 1; } let mut edges: Vec<Vec<i32>> = repeat(repeat(0).take(2).collect()) .take((n - 1) as usize) .collect(); for i in 1..n { edges[(i - 1) as usize][0] = order[i as usize]; edges[(i - 1) as usize][1] = order[rand::thread_rng().gen_range(0, i) as usize]; } return edges;}// 為了測(cè)試fn right_answer(n: i32, edges: &mut Vec<Vec<i32>>, colors: &mut Vec<i32>) -> bool { let mut graph: Vec<Vec<i32>> = vec![]; for _i in 0..n { graph.push(vec![]); } for edge in edges.iter() { graph[edge[0] as usize].push(edge[1]); graph[edge[1] as usize].push(edge[0]); } let mut has_colors: Vec<bool> = repeat(false).take(4).collect(); let mut i = 0; let mut color_cnt = 1; while i < n { if colors[i as usize] == 0 { return false; } if graph[i as usize].len() <= 1 { // i號(hào)點(diǎn)是葉節(jié)點(diǎn) i += 1; color_cnt = 1; continue; } has_colors[colors[i as usize] as usize] = true; for near in graph[i as usize].iter() { if !has_colors[colors[*near as usize] as usize] { has_colors[colors[*near as usize] as usize] = true; color_cnt += 1; } } if color_cnt != 3 { return false; } has_colors = repeat(false).take(4).collect(); i += 1; color_cnt = 1; } return true;}

      執(zhí)行結(jié)果如下:

      ***

      [左神java代碼](github/algorithmzuo/weekly-problems/blob/main/src/class_2022_08_2_week/Code02_TreeDye.java)

       
      (文/葉承宇)
      免責(zé)聲明
      本文僅代表作發(fā)布者:葉承宇個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
       

      Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

      粵ICP備16078936號(hào)

      微信

      關(guān)注
      微信

      微信二維碼

      WAP二維碼

      客服

      聯(lián)系
      客服

      聯(lián)系客服:

      在線QQ: 303377504

      客服電話: 020-82301567

      E_mail郵箱: weilaitui@qq.com

      微信公眾號(hào): weishitui

      客服001 客服002 客服003

      工作時(shí)間:

      周一至周五: 09:00 - 18:00

      反饋

      用戶
      反饋

      午夜久久久久久网站,99久久www免费,欧美日本日韩aⅴ在线视频,东京干手机福利视频
        <strike id="ca4is"><em id="ca4is"></em></strike>
      • <sup id="ca4is"></sup>
        • <s id="ca4is"><em id="ca4is"></em></s>
          <option id="ca4is"><cite id="ca4is"></cite></option>
        • 主站蜘蛛池模板: 亚洲熟妇无码爱v在线观看| 国产一区二区在线视频| 久久人人爽人人爽人人片AV超碰 | 丰满上司的美乳| 精品黑人一区二区三区| 好紧的小嫩木耳白浆| 亚洲精品亚洲人成在线观看 | 中文在线√天堂| 狠狠躁夜夜人人爽天96| 国产色在线com| 久久网免费视频| 美国十次啦大导航| 在线观看免费av网站| 亚洲乱码国产乱码精品精| 视频黄页在线观看| 妞干网在线播放| 亚洲国产精品一区二区第四页| 黄色一级视频欧美| 岛国a香蕉片不卡在线观看| 亚洲第一页国产| 高潮毛片无遮挡高清免费视频| 性欧美video视频另类| 亚洲熟妇丰满多毛XXXX| 成年美女黄网站色大片图片| 成人草莓视频在线观看| 亚洲综合色婷婷在线观看| 中文字幕丝袜制服| 成人国产mv免费视频| 亚洲毛片基地4455ww| 韩国午夜理论在线观看| 好男人手机在线| 亚洲aⅴ在线无码播放毛片一线天 亚洲aⅴ无码专区在线观看q | 外国一级黄色毛片| 五月婷婷亚洲综合| 精品91自产拍在线| 国产精品一区二区电影| 中文字幕三级久久久久久| 欧美黄成人免费网站大全| 国产免费AV片无码永久免费| jizz免费观看视频| 最刺激黄a大片免费观看下截|