機器人都會走迷宮了,我們?nèi)绾卧诓脝T浪潮中升職加薪!
大家好,我是哪吒。
臨下班的時候,同事電話里吐槽道
今年的年終獎比去年多了一點
嗯,是不錯,去年1000,今年2000
今年已經(jīng)是連續(xù)第四年沒開年會了,疫情三年,今年默認疫情了!
那要不要換個工作啥的?
她笑了笑,回了句,抱歉,今年沒有金三銀四了!
現(xiàn)在的行情就是哀鴻遍野。
裁員不可怕,可怕的是不給任何賠償,還要讓你憋屈的主動離職,比如強制加班、強制調(diào)崗、強制出差。
能領(lǐng)取大禮包畢業(yè)的,已經(jīng)算是人上人了。
有些裁員也是以訛傳訛,無中生有。
不管怎么裁,我們還是要工作的,千萬不要沖動,轉(zhuǎn)行去干四大金剛(快遞、外賣、滴滴、自媒體)。你的身體扛不住的,而且它們也沒有你想象中的那么香。
面對裁員問題,我們要如何自救?
如果是被裁者:
- 與領(lǐng)導(dǎo)和HR心平氣和的談?wù)?,如何才能獲取到更好的失業(yè)補償,切記沖動,破罐子破摔,憤然裸辭!
- 充分利用交接時間,與家人、朋友結(jié)伴出游,調(diào)整自己的心態(tài),克服被拋棄的消極情緒。
- 充分利用企業(yè)規(guī)模裁員的機會,跳槽到你心儀的公司,也許這是一次升職加薪的好機遇。
如果是幸存者:
裁員一波接一波,一個季度一份名單,此次沒你,下次就不一定了!
- 做好本職工作,爭取多在領(lǐng)導(dǎo)面前表現(xiàn),聽哥一句話,會干的不如會說的。
- 裁員過后,工作任務(wù)勢必會增加,調(diào)整心態(tài),避免消極情緒。
- 多學(xué)習,技多不壓身,不管大環(huán)境多糟糕,有能力的人總會有用武之地。
- 做好職業(yè)規(guī)劃,不管裁與不裁,切忌躺平,學(xué)如逆水行舟,不進則退,現(xiàn)在的小年輕兒,猛的很,什么云原生、中間件、JVM、性能優(yōu)化,信手拈來。
- 要想進大廠,算法很重要。
我們只有不斷地學(xué)習新知識和技能,以保持高水平的編程能力。這不僅能夠提升我們的工作效率,還能夠在職場競爭中脫穎而出,讓我們一起在裁員的浪潮中升職加薪。
機器人走迷宮
一、題目描述
- 房間由XY的方格組成,例如下圖為24的大小。每一個方格以坐標(x,y)描述。
- 機器人固定從方格(0,0)出發(fā),只能向東或者向北前進。出口固定為房間的最東北角,如下圖的方格(5,3)。用例保證機器人可以從入口走到出口。
- 房間有些方格是墻壁,如(4,1),機器人不能經(jīng)過那兒。
- 有些地方是一旦到達就無法走到出口的,如標記為B的方格,稱之為陷阱方格。
- 有些地方是機器人無法到達的的,如標記為A的方格,稱之為不可達方格,不可達方格不包括墻壁所在的位置。
- 如下示例圖中,陷阱方格有2個,不可達方格有3個;
- 請為該機器人實現(xiàn)路徑規(guī)劃功能: 給定房間大小、墻壁位置,請計算出陷阱方格與不可達方格分別有多少個。
二、輸入描述
- 第一行為房間的X和Y (0 < X,Y = 1000)
- 第二行為房間中墻壁的個數(shù)N (0 = N< X*Y)
同一行中如果有多個數(shù)據(jù)以一個空格隔開,用例保證所有的輸入數(shù)據(jù)均合法。(結(jié)尾不帶回車換行)。
三、輸出描述
陷阱方格與不可達方格數(shù)量,兩個信息在一行中輸出,以一個空格隔開。(結(jié)尾不帶回車換行)。
四、解題思路
1.第一行輸入行數(shù)m、列數(shù)n。
2.第二行輸入墻數(shù)wallNum。
3.下面的wallNum行,輸入墻的坐標。
4.定義二維矩陣matrix,并進行初始化,默認0,墻為-1。
- 0:不可達,因為默認是0,向x和y正方向一步一步走的話,如果未涉及,就是不可達,所以是0。
- -1:墻。
- 1:可達。
- -2:陷阱。
5.通過深度優(yōu)先搜索dfs,遍歷matrix。
- 如果x或y正向都可達,則將其設(shè)為可達1。
- 如果x或y正向都不可達,則將其設(shè)為陷阱-2。
6.遍歷matrix。
- 如果此時為0,表示不可達。
- 如果此時為-2,表示陷阱。
7.按照指定格式輸出陷阱和不可達的數(shù)量。
五、深度優(yōu)先搜索dfs
在我們遇到的一些問題當中,有些問題我們不能夠確切的找出數(shù)學(xué)模型,即找不出一種直接求解的方法,解決這一類問題,我們一般采用搜索的方法解決。搜索就是用問題的所有可能去試探,按照一定的順序、規(guī)則,不斷去試探,直到找到問題的解,試完了也沒有找到解,那就是無解,試探時一定要試探完所有的情況(實際上就是窮舉);
對于問題的第一個狀態(tài),叫初始狀態(tài),要求的狀態(tài)叫目標狀態(tài)。搜索就是把規(guī)則應(yīng)用于實始狀態(tài),在其產(chǎn)生的狀態(tài)中,直到得到一個目標狀態(tài)為止。產(chǎn)生新的狀態(tài)的過程叫擴展(由一個狀態(tài),應(yīng)用規(guī)則,產(chǎn)生新狀態(tài)的過程)。
搜索的要點:
- 初始狀態(tài)。
- 重復(fù)產(chǎn)生新狀態(tài)。
- 檢查新狀態(tài)是否為目標,是結(jié)束,否轉(zhuǎn)(2)。
如果搜索是以接近起始狀態(tài)的程序依次擴展狀態(tài)的,叫寬度優(yōu)先搜索。
如果擴展是首先擴展新產(chǎn)生的狀態(tài),則叫深度優(yōu)先搜索。
深度優(yōu)先搜索用一個數(shù)組存放產(chǎn)生的所有狀態(tài)。
- 把初始狀態(tài)放入數(shù)組中,設(shè)為當前狀態(tài)。
- 擴展當前的狀態(tài),產(chǎn)生一個新的狀態(tài)放入數(shù)組中,同時把新產(chǎn)生的狀態(tài)設(shè)為當前狀態(tài)。
- 判斷當前狀態(tài)是否和前面的重復(fù),如果重復(fù)則回到上一個狀態(tài),產(chǎn)生它的另一狀態(tài)。
- 判斷當前狀態(tài)是否為目標狀態(tài),如果是目標,則找到一個解答,結(jié)束算法。
- 如果數(shù)組為空,說明無解。
六、Java算法源碼
private static int m;// 行數(shù)
private static int n;// 列數(shù)
private static int wallNum;// 墻數(shù)
private static int[][] matrix;// 二維矩陣
/**
* 0:不可達,因為默認是0,向x和y正方向一步一步走的話,如果未涉及,就是不可達,所以是0
* -1:墻
* 1:可達
* -2:陷阱
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] input = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
m = input[0];
n = input[1];
wallNum = Integer.valueOf(sc.nextLine());
matrix = new int[m][n];
matrix[m - 1][n - 1] = 1; // 可達1
for (int i = 0; i < wallNum; i++) {
int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
matrix[arr[0]][arr[1]] = -1; // 墻-1,默認為0
}
dfs(0, 0);
int trapNum = 0; // 陷阱
int inaccessibleNum = 0; // 不可達
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0) {// 不可達
inaccessibleNum++;
}else if (matrix[i][j] == -2) {// 陷阱
trapNum++;
}
}
}
System.out.println(trapNum + " " + inaccessibleNum);
}
public static boolean dfs(int x, int y) {
if (x >= m || y >= n) {// 非法輸入
return false;
}
if (matrix[x][y] == -1) {// 墻
return false;
}
if (matrix[x][y] == -2) {// 不可達
return false;
}
if (matrix[x][y] == 1) {// 可達
return true;
}
if (matrix[x][y] == 0) {
boolean step_x = dfs(x + 1, y);
boolean step_y = dfs(x, y + 1);
// 如果x或y正向都可達,則將其設(shè)為可達1
if (step_x || step_y) {
matrix[x][y] = 1;
} else {// 如果x或y正向都不可達,則將其設(shè)為陷阱-2
matrix[x][y] = -2;
}
}
return matrix[x][y] == 1;
}
七、效果展示
1.輸入
6 4 5 0 2 1 2 2 2 4 1 5 1
2.輸出
2 3