給你代碼:

凌云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;
}
}
有向圖是個(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è)思路。
一個(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)行上述操作即可。
方法一:首先從頭節(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)