给定一个图G(V,E),V是点的集合有n个点,E是边的集合有m条边,现在问题是对图中任意一个点v,要找出有多少个三角形包括了这个点。
邻接矩阵辅助,进行图的深度优先遍历。取需
import java.util.Scanner; public class Main { public static int q=0; // 目标节点 public static int n; public static int m; public static int[][] maze; public static int count=0; //结果存储 public static int[] book; //标记数组 public static void main(String[] args) { Scanner sc = new Scanner(System.in); //输入n:点的个数 //m:边的条数 n=sc.nextInt(); m=sc.nextInt(); maze=new int [n][n]; book=new int[n]; //初始化邻接矩阵 for (int i = 0; i < n; i++) { for (int j = 0; j < 0; j++) { maze[i][j]=0; } } //初始化标记数组 for (int i = 0; i < n; i++) { book[i]=0; } //输入边 for (int i = 0; i <m; i++) { int x=sc.nextInt(); int y=sc.nextInt(); maze[x][y]=1; maze[y][x]=1; } //0开始,0结束 dfs(0, 0); //同一个三角形走过了两次,所以要除以2 System.out.println(count/2); } public static void dfs(int index,int step){ System.out.println("当前到达index= "+index); //判断是否到达目标节点且步数为3 if(index==q&&step==3){ //计数加1 count++; return; } //步数为3还未到达目标节点则返回 if(step>=3){ return; } //枚举下一个可以到达的点 for (int i = 0; i < n; i++) { //下一个点不能是自己且有通路到达下一个点 if(i!=index &&maze[index][i]==1){ //下一个点是目标节点直接访问 if(i==q){ dfs(i,step+1); continue; } //下一个点未被访问过则递归访问,步数+1 if(book[i]!=1){ book[i]=1; dfs(i,step+1); book[i]=0; } } } } }
相关推荐
给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径,使该路径经过的数字总和最大。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 编程任务: 对于给定的由n 行数字组成...
给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 编程任务:对于给定的由n 行数字组成的数字三角形,编程计算从三角形的顶至底...
C语言程序设计-找出一个大于给定整数且紧随这个整数的素数,并作为函数值返回;
给定一个由n行数字组成的数字三角形,如下图所示。 试设计一个算法,计算出从三角形的顶部至底部的一条路径,使得该路径上经过的数字总和值最大。
给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符三角形。 输入 输入只有一行, 包含一个字符。 输出 该字符构成的等腰三角形,底边长5个字符,高3个字符。 样例输入 * 样例输出 * *** *****
给定程序中,函数fun的功能是:在任意给定的9个正整数中找出按升序排列是处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。...
给定三个正整数,分别表示三条线段的长度,判断这三条线段能否构成一个三角形。如果能构成三角形,则输出“yes”,否则输出“no”。 【输入】 输入共一行,包含三个正整数,分别表示三条线段的长度,数与数之间以一...
利用c语言输出一个三角形,在输出前面没有加入空格
对于一个连通图G,采用深度优先搜索的方法,识别出G的所有关节点。要求:首先输出DFN和Low数组的值,然后输出所有关节点。
非常实用的且完全的判断程序,能对delaunay插值进行很好的辅助作用
给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。 比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2的两倍,18是9的两倍。 输入形式 输入...
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。 输入的第二行有n个整数s1, s2, …, sn ...
课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的
如果G的一个子图G’是一棵包含G的所有定点的树,则称G’为G的生成树。生成树上各边权的总和称为该生成树的耗费。在G的所有生成树中,耗费最小的生成树称为最小生成树。采用贪心策略可以直接求得给定网络的最小生成树...
本程序主要是判断点与多边形间的关系,在多边形内还是在多边形外。
给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello” 输入描述: 输入数据有多组,每组占一行...
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 【输入】 一个字符串,长度小于100000。 【输出】 输出第一个仅出现一次的字符,若没有则输出no。 【输入样例】 abcabd ...
最长公共子序列问题就是给定两个序列X={x1,x2,...xm}和Y={y1,y2,...yn},找出X和Y的一个最长公共子序列。 Input 输入包含多组测试数据。第一行为一个整数C,表示有C组测试数据,接下来有C行数据,每组测试数据...
给定一个整数n,求出所有连续的且和为n正整数。比如对于整数27,结果为2~7、8~10、13和14,因为这些数之间的整数的和都是27。注意:并不是所有的整数都有结果,例如不存在连续的整数和为16。为了提高计算的效率,...
# 给定一个字符串,找出不含有重复字符的最长子串的长度 # 示例 1: # 输入: "abcabcbb" # 输出: 3 # 解释: 无重复字符的最长子串是 "abc",其长度为 3 # 示例 2: # 输入: "bbbbb" # 输出: 1 # 解释: 无重复字符的...