public class Sample {
public static void main(String[] args) {
int [][]num = { //測驗資料
{3,4,2,5,3,8,4,6,9},
{22,28,16,6,27,21,30,1,29,10,9,14,24,11,7,2,8,5,26,4,12,3,25,18,20,19,23,17,13,15},
{2,3,4,4}
};
int max=-1, n;
List<Integer> tmp = new ArrayList<>(); //尋找用
List<Integer> res = new ArrayList<>(); //保存結果用
for (int j=0; j<num.length; j++) { //遍歷取測驗資料
max = -1;
res.clear();
for (int i=0; i<num[j].length; i++) { //此處以下是演算法的開始,遍歷崇拜關系
if (res.contains(i+1)) continue; //如果當前崇拜者被遍歷過則跳過(只是為了改善性能,不要這行代碼也沒關系)
tmp.clear();
n = i+1; //當前崇拜者編號
tmp.add(n); //當前崇拜者加入環
while (true) { //一層層查找崇拜關系
n = num[j][n-1]; //取下一個崇拜者
if (!tmp.contains(n)) { //如果不在環中則加入環
tmp.add(n);
if (tmp.size() > num[j].length) break; //為了防止崇拜關系不正確而死回圈(不存在環),正常可以不要這行代碼
} else { //如果在環中(能形成環)
if (n!=i+1) {//如果最后一個崇拜者不是最開始的第一個崇拜者
tmp = tmp.subList(tmp.indexOf(n), tmp.size()); //則去掉不符合環的崇拜者
}
if (tmp.size()>max) { //如果環的人數大于max,則重新修改max,并保存環
max=tmp.size();
res.clear();
res.addAll(tmp);
}
break; //形成環則退出一層層查找崇拜關系
}
}
}
System.out.println(max); //列印最大環
System.out.println(res);
}
}
}
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......