パス面12マトリックスGolang質問の後戻り

12顔の質問パス行列

マトリックス内の文字列のすべての文字を含むルートがあるかどうかを決定する機能を設計してください。経路は、細胞のマトリックスのいずれかから開始することができ、行列の各ステップは、右、上及びグリッドの移動下、左することができます。グリッドマトリックス次々パスした場合、パスは再びグリッドを入力することはできません。例えば、3×4次の行列における「bfce」パスを含む文字列(パスは、太字で示されます)。

[[「」、「B」、「C」、「E」]、
[「S」、「F」、「C」、「S」]、
[「」、「D」、「E」、 「E」]]

文字列Bが第2のグリッドの後の最初の行列の最初の行を占めるしかし、「abfb」パス文字列が含まれていないマトリックスは、グリッドが再びパスを入力することができません。

例1:

入力:ボード= [ "A" 、 "B"、 "C"、 "E"]、[ "S"、 "F"、 "C"、 "S"]、[ "A"、 "D"、 "E"、 "E"] ]、単語= "ABCCED"
出力:真

例2:

入力:ボード= [[ "" 、 "B"]、[ "C"、 "D"は]]、単語= "ABCD"
偽:出力

ヒント:

1 <= board.length <= 200
1 <=ボード[I] .LENGTH <= 200

思考

バックトラック。
ノートにリアライズのものを移動します。
パラメータ値は、引数の値に影響を与えるので、スライスポインタが実際に送信された時刻を渡すパラメータ機能を行きます。
C ++ / Javaでは、トランスファーベクターまたは配列は、引数には影響しない仮パラメータのコピーを作成することです。

したがってC ++ / Javaを使用して直接操作ボードに渡すことができるが、移動は、マトリックス記録状態の確立に加えて、必要とされます。
行って下質量参加実験、あなたが興味を見ることができます。

私の答え

func exist(board [][]byte, word string) bool {
	for i:=0;i<len(board);i++{
		for j:=0;j<len(board[0]);j++{
			mark:=make([][]bool,len(board))
			for k:=0;k<len(board);k++{
				mark[k]= make([]bool,len(board[0]))
			}
			if search(board,mark,i,j,word){
				return true
			}
		}
	}
	return false
}

func search(board [][]byte,mark [][]bool,i,j int,word string)bool{
	if len(word)==0{
		return true
	}
	if i<len(board)&&i>=0&&j<len(board[0])&&j>=0{
			if mark[i][j]==false&&board[i][j]==byte(word[0]){
				mark[i][j]=true
				down:=search(board,mark,i+1,j,word[1:])
				up:=search(board,mark,i-1,j,word[1:])
				right:=search(board,mark,i,j+1,word[1:])
				left:=search(board,mark,i,j-1,word[1:])
				if down||up||right||left{
					return true
				}else{
					mark[i][j]=false
				}
		}
	}
	return false
}

ミサの参加実験

ゴー

コード:

package main

import "fmt"

func main()  {
	a:=[]int{1,2,3}
	fmt.Println(a)
	modify(a)
	fmt.Println(a)
}
func modify(a []int)  {
	a[0]=4
}

結果:
ここに画像を挿入説明

C ++

#include <iostream>
#include <vector>

using namespace std;

void modify(vector<int> nums) {
    nums[0] = 4;
}

void printVector(vector<int> nums) {
    for (int i = 0; i < nums.size(); i++) {
        cout << nums[i] << " ";
    }
}

int main()
{
    vector<int>nums = { 1,2,3 };
    printVector(nums);
    cout << endl<<"--------" << endl;
    modify(nums);
    printVector(nums);
    return 0;
}

結果:
ここに画像を挿入説明

公開された38元の記事 ウォンの賞賛0 ビュー1034

おすすめ

転載: blog.csdn.net/Cyan1956/article/details/104750260