程式設計中的蛇形填空問題 面試中遇到的乙個蛇形演算法題

2021-10-12 14:33:47 字數 2552 閱讀 5251

參加面試第一次遇到當場寫演算法題的,順時針列印矩陣的座標,如圖所示

順序為,0,1,2,3,4,9,14,19,24,23,22,21,20,15,10,5,6,7,8,13,18,17,16,11,12

假設 0的座標為(0,0),1的座標為(0,1),5的座標為(1,0)其他以此類推。

題目是列印出來順序的座標。

總體思路採用乙個大迴圈控制,迴圈條件當前的最大縱座標不小於最小縱座標,並且當前小橫座標不小於最大橫座標時,迴圈終止,然後再按照上右下左的順序分四個小迴圈遍歷。

第一步:實現等高等寬的矩陣(x=y)的座標遍歷。

第二步:採用記錄標誌的方式改進,實現x!=y或x=y矩陣的遍歷。 第二步:採用記錄標誌的方式改進,實現x!=y或x=y矩陣的遍歷。

第一步**實現:

* [printxy 順時針遍歷等高等寬矩陣座標]

* @param integer $n [矩陣寬高]

* @return string [座標字串]

function printxy($n=1)

if($n<=1) return '(0,0)';

$mintopx = 0; //當前最小橫座標

$maxrighty = $n-1; //當前最大縱座標

$maxbottomx = $n-1; //當前最大橫座標

$minlefty = 0; //當前最小縱座標

$sortxy = ''; //定義乙個空字串,用於接收座標

//當當前的最大縱座標不小於最小縱座標,並且當前小橫座標不小於最大橫座標時,迴圈終止

while ($minlefty <= $maxrighty && $mintopx 右->下->左

// 當前上面一行

for($j = $minlefty; $j <= $maxrighty; $j++) {

$sortxy .= '('.$mintopx.','.$j.') ';

$mintopx++;

// 當前右邊一行

for($i = $mintopx; $i = $minlefty; $j--) {

$sortxy .= '('.$maxbottomx.','.$j.') ';

$maxbottomx--;

// 當前左邊一行

for($i = $maxbottomx; $i >= $mintopx; $i--) {

$sortxy .= '('.$i.','.$minlefty.') ';

$minlefty++;

return $sortxy;

第二步的實現**:

* [printxy2 順時針遍歷矩陣座標]

* @param integer $x [矩陣寬度]

* @param integer $y [矩陣高度]

* @return string [座標字串]

function printxy2($x=1,$y=1)

if($x<=1 && $y<=1) return '(0,0)';

$mintopx = 0; //最小橫座標

$maxrighty = $y-1; //最大縱座標

$maxbottomx = $x-1; //最大橫座標

$minlefty = 0; //最小縱座標

$sortxy = ''; //定義乙個空字串,用於接收座標

$sortxyflagarr[0][0] = false; //定義乙個二維陣列,記錄是否被使用過。

//當當前的最大縱座標不小於最小縱座標,並且當前小橫座標不小於最大橫座標時,迴圈終止

while ($minlefty <= $maxrighty && $mintopx 右->下->左

// 當前上面一行

for($j = $minlefty; $j <= $maxrighty; $j++) {

if(!isset($sortxyflagarr[$mintopx][$j])){

$sortxy .= '('.$mintopx.','.$j.') ';

$sortxyflagarr[$mintopx][$j] = true;

$mintopx++;

// 當前右邊一行

for($i = $mintopx; $i = $minlefty; $j--) {

if(!isset($sortxyflagarr[$maxbottomx][$j])){

$sortxy .= '('.$maxbottomx.','.$j.') ';

$sortxyflagarr[$maxbottomx][$j] = true;

$maxbottomx--;

// 當前左邊一行

for($i = $maxbottomx; $i >= $mintopx; $i--) {

if(!isset($sortxyflagarr[$i][$minlefty])){

$sortxy .= '('.$i.','.$minlefty.') ';

$sortxyflagarr[$i][$minlefty] = true;

$minlefty++;

return $sortxy;

請大家指正。

面試中遇到的問題

ado activex data objects 是乙個用於訪問資料來源的 com元件 應用程式介面 應用程式和底層軟體互動控制的聯絡方法 超文字置標語言 英文 hypertext markup language 簡稱為 html 什麼是 超檔案傳輸協議 是網際網路上應用最為廣泛的一種網路傳輸協議。...

面試中遇到的問題

ado activex data objects 是乙個用於訪問資料來源的 com元件 應用程式介面 應用程式和底層軟體互動控制的聯絡方法 超文字置標語言 英文 hypertext markup language 簡稱為 html 什麼是 超檔案傳輸協議 是網際網路上應用最為廣泛的一種網路傳輸協議。...

面試中遇到問題

本人10年畢業,2年兵役,2年空白期,4年不到的it行業從業經驗,3個月小公司,3年左右的外包圈,這些資料沒什麼說服力。總體來說沒有積累財富,沒有積累人脈,沒有結婚,情商是硬傷,智商一般,做事缺少套路,執行力還行,深圳平均工資。行業領域都是空白,銷售小白,未來不知道何去何從。最近面試過程中遇到一些問...