2026/1/12 14:18:22
网站建设
项目流程
asp.net企业网站管理系统,广东建设数据开放平台系统,wordpress广告位的添加方法,wordpress 文章目录插件统计员工影响力分数 2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 200分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录#xff5c;机考题库 算法考点详解
题目描述
假设你是大型科技公司的数据分析师#xff0c;负责分析公司内部员…统计员工影响力分数2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 200分题型华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录机考题库 算法考点详解题目描述假设你是大型科技公司的数据分析师负责分析公司内部员工的社交网络。你需要编写一个函数来计算每个员工的影响力分数。影响力分数定义为该员工直接和间接影响的员工数量。输入描述n员工总数。employess:一个二维列表表示员工的社交网络关系。例如employees[i]是一个包含员工i直接影响的员工ID的列表。备注employees列表中* 表示没有直接影响到的员工员工总数小于20自身不算分数。输出描述influenceScores一个整数数组表示每个员工的影响力分数。用例1输入4 1 2 3 *输出3 2 1 0用例2输入5 1 2 3 4 * *输出4 1 1 0 0用例3输入6 1 2 3 4 5 0 *输出5 2 5 1 5 0题解思路DFS算法求解处理输入将每个人的可以直接影响的员工使用数组保存。枚举[0,n-1]员工分别递归计算可直接和间接影响的人数递归逻辑还是比较简单的可参照下面代码逻辑不过递归主要注意两点即可题目没有要求影响不成环,所以需要定义visisted数组进行去重。影响不包含本身所以递归开始时直接将自身visisted设置为true.按题目要求输出每个员工影响人数。c#includeiostream #includevector #includestring #include utility #include sstream #includealgorithm #includecmath #includemap using namespace std; // 通用 切割函数 函数 将字符串str根据delimiter进行切割 vectorint split(const string str, const string delimiter) { vectorint result; size_t start 0; size_t end str.find(delimiter); while (end ! string::npos) { result.push_back(stoi(str.substr(start, end - start))); start end delimiter.length(); end str.find(delimiter, start); } // 添加最后一个部分 result.push_back(stoi(str.substr(start))); return result; } int dfs(int index, vectorbool visited, vectorvectorint employees) { int cnt 0; for (auto v : employees[index]) { if (visited[v]) { continue; } visited[v] true; cnt 1; cnt dfs(v, visited, employees); } return cnt; } int main() { int n; cin n; // 忽略换行符 cin.ignore(); vectorvectorint employees(n); vectorint res(n, -1); for (int i 0; i n; i) { string line; getline(cin, line); // 直接确定为0 if (line *) { res[i] 0; continue; } employees[i] split(line, ); } // DFS影响人数 for (int i 0; i n; i) { if (employees[i].empty()) { res[i] 0; continue; } vectorbool visited(n, false); // 自己不算 visited[i] true; res[i] dfs(i, visited, employees); } // 输出结果 for (int i 0; i n; i) { if (i ! 0) { cout ; } cout res[i]; } return 0; }JAVAimport java.io.*; import java.util.*; public class Main { // DFS 统计影响人数 static int dfs(int index, boolean[] visited, ListListInteger employees) { int cnt 0; for (int v : employees.get(index)) { if (visited[v]) continue; visited[v] true; cnt 1; cnt dfs(v, visited, employees); } return cnt; } public static void main(String[] args) throws Exception { BufferedReader br new BufferedReader(new InputStreamReader(System.in)); int n Integer.parseInt(br.readLine()); ListListInteger employees new ArrayList(); for (int i 0; i n; i) employees.add(new ArrayList()); int[] res new int[n]; Arrays.fill(res, -1); for (int i 0; i n; i) { String line br.readLine(); if (line.equals(*)) { res[i] 0; continue; } String[] parts line.split( ); for (String p : parts) { employees.get(i).add(Integer.parseInt(p)); } } // 对每个员工做一次 DFS for (int i 0; i n; i) { if (employees.get(i).isEmpty()) { res[i] 0; continue; } boolean[] visited new boolean[n]; visited[i] true; // 自己不算 res[i] dfs(i, visited, employees); } // 输出 StringBuilder sb new StringBuilder(); for (int i 0; i n; i) { if (i 0) sb.append( ); sb.append(res[i]); } System.out.println(sb); } }Pythonimportsys sys.setrecursionlimit(10**7)# DFS 统计影响人数defdfs(index,visited,employees):cnt0forvinemployees[index]:ifvisited[v]:continuevisited[v]Truecnt1cntdfs(v,visited,employees)returncntdefmain():nint(sys.stdin.readline())employees[[]for_inrange(n)]res[-1]*nforiinrange(n):linesys.stdin.readline().strip()ifline*:res[i]0continueemployees[i]list(map(int,line.split()))# 对每个员工做 DFSforiinrange(n):ifnotemployees[i]:res[i]0continuevisited[False]*n visited[i]True# 自己不算res[i]dfs(i,visited,employees)print( .join(map(str,res)))if__name____main__:main()JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});letlines[];rl.on(line,linelines.push(line));rl.on(close,(){letidx0;constnparseInt(lines[idx]);constemployeesArray.from({length:n},()[]);constresArray(n).fill(-1);for(leti0;in;i){constlinelines[idx].trim();if(line*){res[i]0;continue;}employees[i]line.split( ).map(Number);}// DFS 统计影响人数functiondfs(index,visited){letcnt0;for(constvofemployees[index]){if(visited[v])continue;visited[v]true;cnt1;cntdfs(v,visited);}returncnt;}for(leti0;in;i){if(employees[i].length0){res[i]0;continue;}constvisitedArray(n).fill(false);visited[i]true;// 自己不算res[i]dfs(i,visited);}console.log(res.join( ));});Gopackagemainimport(bufiofmtosstrconvstrings)// DFS 统计影响人数funcdfs(indexint,visited[]bool,employees[][]int)int{cnt:0for_,v:rangeemployees[index]{ifvisited[v]{continue}visited[v]truecntcntdfs(v,visited,employees)}returncnt}funcmain(){in:bufio.NewReader(os.Stdin)varnintfmt.Fscanln(in,n)employees:make([][]int,n)res:make([]int,n)fori:0;in;i{res[i]-1}fori:0;in;i{line,_:in.ReadString(\n)linestrings.TrimSpace(line)ifline*{res[i]0continue}parts:strings.Split(line, )for_,p:rangeparts{val,_:strconv.Atoi(p)employees[i]append(employees[i],val)}}fori:0;in;i{iflen(employees[i])0{res[i]0continue}visited:make([]bool,n)visited[i]true// 自己不算res[i]dfs(i,visited,employees)}// 输出writer:bufio.NewWriter(os.Stdout)fori:0;in;i{ifi0{fmt.Fprint(writer, )}fmt.Fprint(writer,res[i])}writer.Flush()}