關於常見矩陣路徑計算問題(ios版本)
常見型別介紹:
/*●問題描述:
給出乙個矩陣,其中0表示通路,1表示牆壁,這樣就形成了乙個迷宮,要求編寫演算法求出其中一條路徑。
●遞迴思路:
編寫乙個走迷宮函式,傳入二位陣列的下標,先假設該點位於最終路徑上(將0置為2)再探測周圍四個點是否可以走通(是否為0),如果可以走通則將該點四周能走通的點作為函式引數傳入函式進入遞迴。若四周均不能走通(都不為0時)則將該點置回0表示該點不是最終路徑上的點。
在此思路中遞迴進入時表示了列舉路徑,當發現此條路徑走到某處再不能走通時就將路徑該點置回0並且遞迴退出(回溯)尋找下一條可走通路徑。
*//*
0 1 1 0
0 0 0 0
0 0 0 1
1 0 0 0
*/ 規則中可以上下左右方向前進,求左上角到右下角的最小步數:
核心在於遞迴回溯判斷,下面貼出**
int mazechat(int maze[5],int i,int j)
//不是終點則按照右下左上判斷
if (end !=1 && j+1
<=end_j && maze[i][j+1] == 0)
}if (end !=1 && i+1
<=end_i && maze[i+1][j] == 0)
}if (end !=1 && j-1>=start_j && maze[i][j-1] == 0)
}if (end !=1 && i-1>=start_i && maze[i-1][j] == 0)
}//四周都沒有路
if (end !=1)
return
end;
}
方法呼叫:
if (mazechat(maze, 0, 0) == 0) else
2.最短路徑和計算:
【問題描述】: 給出乙個矩陣,從左上角開始走,只能向右或者向下,所有數字累加就是路徑和,求出其中最小路徑。
, ,
, 先說一共有多少種走法:因為只能向右或者向下,所以數學方向考慮只有向右3次向下三次即可,所以簡單的c6-3 即可
//走法
int uniquepaths(int m, int n)
return (int)res;
}
關於這個問題:
/* 【問題描述】: 給出乙個矩陣,從左上角開始走,只能向右或者向下,所有數字累加就是路徑和,求出其中最小路徑。
思路:只允許向右或者向下走 所以開始計算時當前s[i][j]只可能從s[i-1][j]+data[i][j]或者s[i][j-1]+data[i][j]計算得到
也就是s[i][j] = min(s[i-1][j],s[i][j-1])+ data[i][j] 即需要比較s[i-1][j],s[i][j-1])
因為第一行沒有s[i-1][j]元素,只有s[i][j-1]元素。
第一列沒有s[i][j-1]元素,只有s[i-1][j]元素。
需要特殊處理
*/ 我們通過比較每乙個位置左邊和上邊大小而重新對該位置的值進行求和賦值即可得到乙個全新的矩陣,取矩陣最後乙個值即是我們需要的路徑最短之和:
重新賦值矩陣方法:
//獲取行數和列數
int rows = rows;
int cols = cols;
//第一列
for (int i = 1; i < rows; i++)
//第一行
for (int i = 1; i < cols; i++)
//非第一行和第一列的元素
for (int i = 1; i < rows; i++)
else}}
//返回最短路徑值
return data[rows - 1][cols - 1];
拿到最小路徑和的同時也可以通過得到的新矩陣去正推或者逆推得到路徑下標的走法(這種重新賦值矩陣的方法優點在於只需要遍歷一次即可拿到所有想要的結果,時間和空間複雜度低。缺點在於過程中存在的零時變數太多,所以之後得到新矩陣後才去獲得路徑下標);
兩種推算路徑下標方法:
printf("最優路徑座標:\n");
int rowt = 3;
int colt = 3;
for (int i = 0; i < 7; i++)
else
}int g = 0;
int k = 0;
for (int j = 0; j<7; j++) ",g,k);
if (data[g][k+1] < data[g+1][k]) else
}
矩陣中路徑數目問題
在如下8 6的矩陣中,請計算從a移動到b一共有 種走法。要求每次只能向上或向右移動一格,並且不能經過p。8 6的矩陣,從左下角a到右上角b,一共需要走12步,其中5步向上,7步向右,因此總的走法一共有c 12,5 792種,但題目規定不能經過p,因此需要減去經過p點的走法。經過p的路徑分為兩部分,從...
矩陣中的路徑問題
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字母用加粗標出 a ...
IOS 證書常見問題
1.新加乙個證書後,certifacation 後再匯出mobileprovision 但xcode 檢視該mobileprovision 顯示 valid signing identity not found.原因 是沒有私鑰,私鑰是第乙個用本機申請certifacation時建立的。解決方案 需...