欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java代碼找出所有環(huán) java代碼找出所有環(huán)形圖

大神們幫幫我~ Java編程:數(shù)組中有20個(gè)數(shù),把數(shù)組看成首尾相連的環(huán),找出哪四個(gè)相鄰數(shù)的和為最大

給你代碼:

凌云ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

import java.util.*;

public class Test

{

public static void main(String... args)

{

Random r=new Random();

int[] a=new int[20];

for(int i=0;ia.length;i++)

{

a[i]=r.nextInt(100);

}

System.out.println("數(shù)組:"+Arrays.toString(a));

System.out.print("索引:\t");

int index=getIndex(a);

for(int i=0;i4;i++)

{

int ind=index+i;

ind=ind=a.length?ind-a.length:ind;

System.out.print(ind+"\t");

}

System.out.println();

System.out.println("和:"+getSum(a,index));

}

static int getIndex(int[] arr) throws IllegalArgumentException

{

if(arr.length4) throw new IllegalArgumentException();

int maxSum=0;

int index=0;

for(int i=0;iarr.length;i++)

{

int sum=getSum(arr,i);

if(summaxSum){ maxSum=sum; index=i;}

}

return index;

}

static int getSum(int[] arr,int index) throws IllegalArgumentException

{

if(arr.length4) throw new IllegalArgumentException();

int sum=0;

for(int i=0;i4;i++)

{

int ind=index+i;

ind=ind=arr.length?ind-arr.length:ind;

sum+=arr[ind];

}

return sum;

}

}

c++或java實(shí)現(xiàn),判斷有向圖中是否存在環(huán)路,并輸出所有環(huán)路

有向圖是個(gè)什么東西??一張圖片么?

package?test;

import?java.util.*;

public?class?GectorGraph?{

private?Point?root;

private?ListListString?circlePath;

public?GectorGraph(String?pointName)?{

root=new?Point(pointName);

}

public?GectorGraph(Point?point)?{

root=point;

}

public?boolean?hasCirclePath(){

findCirclePath();

return?circlePath.size()0;

}

public?void?findCirclePath(){

ListPoint?CirclePoints=findCirclePoint();

if(circlePath==null){circlePath=new?ArrayListListString();}

for(Point?tempPoint:CirclePoints){

ListString?pointPath=new?ArrayListString();

findPointPath(tempPoint,root,pointPath);

pointPath.add(root.pointName);

circlePath.add(pointPath);

}

}

public?boolean?findPointPath(Point?target,Point?currentPoint,ListString?pointPath){

if(currentPoint.equals(target)){return?true;}

if(!currentPoint.hasNext()){return?false;}

ListPoint?pointList=?currentPoint.getNextPointList();

for(Point?tempPoint:pointList){

if(tempPoint.equals(root)){continue;}

if(findPointPath(target,tempPoint,pointPath)){

pointPath.add(tempPoint.pointName);

return?true;

}

}

return?false;

}

private?ListPoint?findCirclePoint(){

if(!root.hasNext()){return?null;}

ListPoint?circlePoints=new?ArrayListPoint();

findCirclePoint(root,root,circlePoints);

return?circlePoints;

}

private?void?findCirclePoint(Point?root,Point?currentPoint,ListPoint?circlePoints){

if(!currentPoint.hasNext()){return;}

ListPoint?pointList=?currentPoint.getNextPointList();

for(Point?tempPoint:pointList){

if(tempPoint.equals(root)){circlePoints.add(currentPoint);}

else{findCirclePoint(root,tempPoint,circlePoints);}

}

}

public?void?showPath(){

if(circlePath==null){System.out.println("Error");}

for(ListString?tempList:circlePath){

StringBuffer?pathString=new?StringBuffer();

int?tempListIndex=tempList.size()-1;

for(;tempListIndex-1;tempListIndex--){

pathString.append(tempList.get(tempListIndex));

if(tempListIndex!=0){pathString.append("-");}

}

System.out.println(pathString.toString());

}

}

public?static?void?main(String[]?args)?{

Point?root=new?Point("root");

ListPoint?p3=new?ArrayListPoint();

for(int?i=0;i3;i++){

p3.add(new?Point("3/1/"+i));

}

ListPoint?p4=new?ArrayListPoint();

for(int?i=0;i3;i++){

p4.add(new?Point("3/2/"+i));

}

ListPoint?p2=new?ArrayListPoint();

for(int?i=0;i2;i++){

p2.add(new?Point("2/"+i));

}

p3.add(0,root);

p3.get(2).addNextPoint(root);

p4.get(0).addNextPoint(root);

p2.get(0).addNextPointList(p3);

p2.get(1).addNextPointList(p4);

root.addNextPointList(p2);

GectorGraph?gg=new?GectorGraph(root);

if(gg.hasCirclePath()){

gg.showPath();

}

}

}

class?Point{

public?String?pointName;

private?ListPoint?nextPointList;

public?Point(String?pointName)?{

this.pointName=pointName;

}

public?void?addNextPoint(Point?p){

if(nextPointList==null){nextPointList=new?ArrayListPoint();}

nextPointList.add(p);

}

public?void?addNextPointList(ListPoint?pList){

if(nextPointList==null){nextPointList=new?ArrayListPoint();}

nextPointList.addAll(pList);

}

public?boolean?hasNext(){

return?nextPointList!=null!nextPointList.isEmpty();

}

public?ListPoint?getNextPointList()?{

return?nextPointList;

}

public?void?setNextPointList(ListPoint?nextPointList)?{

this.nextPointList?=?nextPointList;

}

}

呵呵,java寫的,這個(gè)有點(diǎn)攪,求高手給個(gè)思路。

4啊4->'>求一段java程序,求圖是否存在環(huán)。該圖是有向圖。要求該方法輸入邊的序?qū)希热?->4啊4->

一個(gè)頂點(diǎn)a在一個(gè)環(huán)上,那么存在以它為終點(diǎn)的邊, 假設(shè)這些邊的起點(diǎn)集合為PreA, 考察點(diǎn)a能否到達(dá)點(diǎn)PreA中的點(diǎn),如果到達(dá)就找到了一個(gè)環(huán),否則點(diǎn)a不在環(huán)上。

遍歷圖中的頂點(diǎn)進(jìn)行上述操作即可。

Java判斷單鏈表是否有環(huán)的兩種實(shí)現(xiàn)方法

方法一:首先從頭節(jié)點(diǎn)開始,依次遍歷單鏈表的每一個(gè)節(jié)點(diǎn)。每遍歷到一個(gè)新節(jié)點(diǎn),就從頭節(jié)點(diǎn)重新遍歷新節(jié)點(diǎn)之前的所有節(jié)點(diǎn),用新節(jié)點(diǎn)ID和此節(jié)點(diǎn)之前所有節(jié)點(diǎn)ID依次作比較。如果發(fā)現(xiàn)新節(jié)點(diǎn)之前的所有節(jié)點(diǎn)當(dāng)中存在相同節(jié)點(diǎn)ID,則說明該節(jié)點(diǎn)被遍歷過兩次,鏈表有環(huán);如果之前的所有節(jié)點(diǎn)當(dāng)中不存在相同的節(jié)點(diǎn),就繼續(xù)遍歷下一個(gè)新節(jié)點(diǎn),繼續(xù)重復(fù)剛才的操作。

例如這樣的鏈表:A-B-C-D-B-C-D, 當(dāng)遍歷到節(jié)點(diǎn)D的時(shí)候,我們需要比較的是之前的節(jié)點(diǎn)A、B、C,不存在相同節(jié)點(diǎn)。這時(shí)候要遍歷的下一個(gè)新節(jié)點(diǎn)是B,B之前的節(jié)點(diǎn)A、B、C、D中恰好也存在B,因此B出現(xiàn)了兩次,判斷出鏈表有環(huán)。

假設(shè)從鏈表頭節(jié)點(diǎn)到入環(huán)點(diǎn)的距離是D,鏈表的環(huán)長是S。D+S是鏈表總節(jié)點(diǎn)數(shù)。那么算法的時(shí)間復(fù)雜度是0+1+2+3+….+(D+S-1) = (D+S-1)*(D+S)/2 , 可以簡單地理解成 O(N*N)。而此算法沒有創(chuàng)建額外存儲空間,空間復(fù)雜度可以簡單地理解成為O(1)。

方法二:首先創(chuàng)建一個(gè)以節(jié)點(diǎn)ID為鍵的HashSet集合,用來存儲曾經(jīng)遍歷過的節(jié)點(diǎn)。然后同樣是從頭節(jié)點(diǎn)開始,依次遍歷單鏈表的每一個(gè)節(jié)點(diǎn)。每遍歷到一個(gè)新節(jié)點(diǎn),就用新節(jié)點(diǎn)和HashSet集合當(dāng)中存儲的節(jié)點(diǎn)作比較,如果發(fā)現(xiàn)HashSet當(dāng)中存在相同節(jié)點(diǎn)ID,則說明鏈表有環(huán),如果HashSet當(dāng)中不存在相同的節(jié)點(diǎn)ID,就把這個(gè)新節(jié)點(diǎn)ID存入HashSet,之后進(jìn)入下一節(jié)點(diǎn),繼續(xù)重復(fù)剛才的操作。

這個(gè)方法在流程上和方法一類似,本質(zhì)的區(qū)別是使用了HashSet作為額外的緩存。

假設(shè)從鏈表頭節(jié)點(diǎn)到入環(huán)點(diǎn)的距離是D,鏈表的環(huán)長是S。而每一次HashSet查找元素的時(shí)間復(fù)雜度是O(1), 所以總體的時(shí)間復(fù)雜度是1*(D+S)=D+S,可以簡單理解為O(N)。而算法的空間復(fù)雜度還是D+S-1,可以簡單地理解成O(N)。

方法三:首先創(chuàng)建兩個(gè)指針1和2(在Java里就是兩個(gè)對象引用),同時(shí)指向這個(gè)鏈表的頭節(jié)點(diǎn)。然后開始一個(gè)大循環(huán),在循環(huán)體中,讓指針1每次向下移動一個(gè)節(jié)點(diǎn),讓指針2每次向下移動兩個(gè)節(jié)點(diǎn),然后比較兩個(gè)指針指向的節(jié)點(diǎn)是否相同。如果相同,則判斷出鏈表有環(huán),如果不同,則繼續(xù)下一次循環(huán)。

例如鏈表A-B-C-D-B-C-D,兩個(gè)指針最初都指向節(jié)點(diǎn)A,進(jìn)入第一輪循環(huán),指針1移動到了節(jié)點(diǎn)B,指針2移動到了C。第二輪循環(huán),指針1移動到了節(jié)點(diǎn)C,指針2移動到了節(jié)點(diǎn)B。第三輪循環(huán),指針1移動到了節(jié)點(diǎn)D,指針2移動到了節(jié)點(diǎn)D,此時(shí)兩指針指向同一節(jié)點(diǎn),判斷出鏈表有環(huán)。

此方法也可以用一個(gè)更生動的例子來形容:在一個(gè)環(huán)形跑道上,兩個(gè)運(yùn)動員在同一地點(diǎn)起跑,一個(gè)運(yùn)動員速度快,一個(gè)運(yùn)動員速度慢。當(dāng)兩人跑了一段時(shí)間,速度快的運(yùn)動員必然會從速度慢的運(yùn)動員身后再次追上并超過,原因很簡單,因?yàn)榕艿朗黔h(huán)形的。

文章題目:java代碼找出所有環(huán) java代碼找出所有環(huán)形圖
當(dāng)前URL:http://chinadenli.net/article2/hppeoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)企業(yè)網(wǎng)站制作Google做網(wǎng)站營銷型網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司