diff --git a/knight-moves/knight-moves-tutorial.pdf b/knight-moves/knight-moves-tutorial.pdf new file mode 100644 index 0000000..479e25c Binary files /dev/null and b/knight-moves/knight-moves-tutorial.pdf differ diff --git a/knight-moves/knight-moves-tutorial.tex b/knight-moves/knight-moves-tutorial.tex new file mode 100644 index 0000000..a84e69e --- /dev/null +++ b/knight-moves/knight-moves-tutorial.tex @@ -0,0 +1,38 @@ +\documentclass[10pt]{article} +\usepackage[utf8]{inputenc} +\usepackage{amsmath,amsthm,amssymb} +\usepackage{fullpage} +\usepackage{url} +\pagenumbering{gobble} +\usepackage{hyperref} + +\title{ Tutorial: Movimento do Cavalo} +\author{Spoj NAKANJ - Minimum Knight moves} +\date{} +\begin{document} +\maketitle +Para resolver o problema de encontrar o número mínimo de movimentos que um cavalo precisa para ir de uma posição inicial a uma posição de destino em um tabuleiro de xadrez $8 \times 8$, podemos modelar o tabuleiro como um grafo. + +\subsection*{Observações importantes} + +\begin{itemize} + \item Cada casa do tabuleiro representa um vértice do grafo. + \item Cada movimento válido do cavalo corresponde a uma aresta entre dois vértices. + \item O objetivo é encontrar o menor número de arestas que conectam a posição inicial à posição de destino. +\end{itemize} + +\subsection*{Estratégia de solução} + +O problema de encontrar o menor caminho em um grafo sem pesos nas arestas pode ser resolvido eficientemente usando \textbf{Busca em Largura (BFS, \textit{Breadth-First Search})}. + +\begin{enumerate} + \item Inicialize uma fila com a posição inicial do cavalo. + \item Mantenha uma matriz de visitados para marcar as posições já exploradas. + \item Para cada posição na fila, tente todos os oito movimentos possíveis do cavalo: + \begin{itemize} + \item $(+2, +1)$, $(+2, -1)$, $(-2, +1)$, $(-2, -1)$ + \item $(+1, +2)$, $(+1, -2)$, $(-1, +2)$, $(-1, -2)$ + \end{itemize} + \item Se a nova posição estiver dentro do tabuleiro e ainda não tiver sido visitada, marque-a como visitada e adicione-a à fila. + \item Continue até alcançar a posição de destino. +\end{enumerate}\end{document} diff --git a/knight-moves/knight-moves.pdf b/knight-moves/knight-moves.pdf index a81191b..0ea5a16 100644 Binary files a/knight-moves/knight-moves.pdf and b/knight-moves/knight-moves.pdf differ diff --git a/knight-moves/knight-moves.tex b/knight-moves/knight-moves.tex index c9bb020..e6b4d1e 100644 --- a/knight-moves/knight-moves.tex +++ b/knight-moves/knight-moves.tex @@ -21,7 +21,7 @@ Sua tarefa é ajudar Anjali a determinar o número mínimo de movimentos necess \Entrada A primeira linha contém um inteiro $T$ ($1 \leq T \leq 100$), o número de casos de teste. -Cada uma das próximas $T$ linhas contém duas strings — \texttt{inicio} e \texttt{destino} — separadas por um espaço. +Cada uma das próximas $T$ linhas contém duas strings, \texttt{inicio} e \texttt{destino}, separadas por um espaço. Cada string representa uma casa válida do tabuleiro: o primeiro caractere é uma letra de `a' a `h', e o segundo é um dígito de `1' a `8'. diff --git a/knight-moves/statement/input.tex b/knight-moves/statement/input.tex index f4fe6f1..09f0072 100644 --- a/knight-moves/statement/input.tex +++ b/knight-moves/statement/input.tex @@ -1,5 +1,5 @@ A primeira linha contém um inteiro $T$ ($1 \leq T \leq 100$), o número de casos de teste. -Cada uma das próximas $T$ linhas contém duas strings — \texttt{inicio} e \texttt{destino} — separadas por um espaço. +Cada uma das próximas $T$ linhas contém duas strings, \texttt{inicio} e \texttt{destino}, separadas por um espaço. Cada string representa uma casa válida do tabuleiro: o primeiro caractere é uma letra de `a' a `h', e o segundo é um dígito de `1' a `8'. \ No newline at end of file diff --git a/knight-moves/statement/tutorial.tex b/knight-moves/statement/tutorial.tex index e69de29..2e443de 100644 --- a/knight-moves/statement/tutorial.tex +++ b/knight-moves/statement/tutorial.tex @@ -0,0 +1,25 @@ +Para resolver o problema de encontrar o número mínimo de movimentos que um cavalo precisa para ir de uma posição inicial a uma posição de destino em um tabuleiro de xadrez $8 \times 8$, podemos modelar o tabuleiro como um grafo. + +\subsection*{Observações importantes} + +\begin{itemize} + \item Cada casa do tabuleiro representa um vértice do grafo. + \item Cada movimento válido do cavalo corresponde a uma aresta entre dois vértices. + \item O objetivo é encontrar o menor número de arestas que conectam a posição inicial à posição de destino. +\end{itemize} + +\subsection*{Estratégia de solução} + +O problema de encontrar o menor caminho em um grafo sem pesos nas arestas pode ser resolvido eficientemente usando \textbf{Busca em Largura (BFS, \textit{Breadth-First Search})}. + +\begin{enumerate} + \item Inicialize uma fila com a posição inicial do cavalo. + \item Mantenha uma matriz de visitados para marcar as posições já exploradas. + \item Para cada posição na fila, tente todos os oito movimentos possíveis do cavalo: + \begin{itemize} + \item $(+2, +1)$, $(+2, -1)$, $(-2, +1)$, $(-2, -1)$ + \item $(+1, +2)$, $(+1, -2)$, $(-1, +2)$, $(-1, -2)$ + \end{itemize} + \item Se a nova posição estiver dentro do tabuleiro e ainda não tiver sido visitada, marque-a como visitada e adicione-a à fila. + \item Continue até alcançar a posição de destino. +\end{enumerate} \ No newline at end of file diff --git a/sliding-puzzle/sliding-puzzle-tutorial.pdf b/sliding-puzzle/sliding-puzzle-tutorial.pdf new file mode 100644 index 0000000..57ce895 Binary files /dev/null and b/sliding-puzzle/sliding-puzzle-tutorial.pdf differ diff --git a/sliding-puzzle/sliding-puzzle-tutorial.tex b/sliding-puzzle/sliding-puzzle-tutorial.tex new file mode 100644 index 0000000..8d705ba --- /dev/null +++ b/sliding-puzzle/sliding-puzzle-tutorial.tex @@ -0,0 +1,43 @@ +\documentclass[10pt]{article} +\usepackage[utf8]{inputenc} +\usepackage{amsmath,amsthm,amssymb} +\usepackage{fullpage} +\usepackage{url} +\pagenumbering{gobble} +\usepackage{hyperref} + +\title{ Tutorial: 6 Puzzle} +\author{Leetcode 773} +\date{} +\begin{document} +\maketitle +O problema apresentado é uma versão simplificada do \textit{sliding puzzle}. Nosso objetivo é determinar o número mínimo de movimentos para organizar um tabuleiro $2 \times 3$ a partir de um estado inicial qualquer. + +\subsection*{Representação do estado} + +\begin{itemize} + \item Cada configuração do tabuleiro pode ser representada como uma sequência linear de números, por exemplo, $[1, 2, 3, 4, 5, 0]$ para o estado final. + \item A posição do $0$ indica onde a casa vazia está localizada e determina quais movimentos são válidos. +\end{itemize} + +\subsection*{Estratégia de solução usando BFS} + +Podemos modelar o problema como um grafo, onde cada nó é uma configuração do tabuleiro e cada aresta corresponde a um movimento válido do $0$. Uma abordagem eficiente é iniciar a BFS a partir do \textbf{estado final}: + +\begin{enumerate} + \item Inicialize a fila com o estado final $[1,2,3,4,5,0]$ e marque-o como visitado com distância $0$. + \item Para cada estado na fila: + \begin{itemize} + \item Identifique a posição do $0$ e calcule todas as posições adjacentes (horizontal e vertical) para trocas. + \item Gere os estados resultantes dessas trocas. + \item Se algum novo estado corresponder ao estado inicial fornecido, retorne a distância armazenada, que representa o número mínimo de movimentos. + \item Caso contrário, adicione o novo estado à fila e marque-o como visitado. + \end{itemize} + \item Se a fila se esvaziar sem encontrar o estado inicial, retorne $-1$. +\end{enumerate} + +\subsection*{Complexidade} + +\begin{itemize} + \item \textbf{Espacial:} $O(6!)$, pois existem $6! = 720$ possíveis permutações do tabuleiro $2 \times 3$. +\end{itemize}\end{document} diff --git a/sliding-puzzle/sliding-puzzle.pdf b/sliding-puzzle/sliding-puzzle.pdf index 54c3868..f244cc3 100644 Binary files a/sliding-puzzle/sliding-puzzle.pdf and b/sliding-puzzle/sliding-puzzle.pdf differ diff --git a/sliding-puzzle/statement/tutorial.tex b/sliding-puzzle/statement/tutorial.tex index e69de29..e89ef45 100644 --- a/sliding-puzzle/statement/tutorial.tex +++ b/sliding-puzzle/statement/tutorial.tex @@ -0,0 +1,30 @@ +O problema apresentado é uma versão simplificada do \textit{sliding puzzle}. Nosso objetivo é determinar o número mínimo de movimentos para organizar um tabuleiro $2 \times 3$ a partir de um estado inicial qualquer. + +\subsection*{Representação do estado} + +\begin{itemize} + \item Cada configuração do tabuleiro pode ser representada como uma sequência linear de números, por exemplo, $[1, 2, 3, 4, 5, 0]$ para o estado final. + \item A posição do $0$ indica onde a casa vazia está localizada e determina quais movimentos são válidos. +\end{itemize} + +\subsection*{Estratégia de solução usando BFS} + +Podemos modelar o problema como um grafo, onde cada nó é uma configuração do tabuleiro e cada aresta corresponde a um movimento válido do $0$. Uma abordagem eficiente é iniciar a BFS a partir do \textbf{estado final}: + +\begin{enumerate} + \item Inicialize a fila com o estado final $[1,2,3,4,5,0]$ e marque-o como visitado com distância $0$. + \item Para cada estado na fila: + \begin{itemize} + \item Identifique a posição do $0$ e calcule todas as posições adjacentes (horizontal e vertical) para trocas. + \item Gere os estados resultantes dessas trocas. + \item Se algum novo estado corresponder ao estado inicial fornecido, retorne a distância armazenada, que representa o número mínimo de movimentos. + \item Caso contrário, adicione o novo estado à fila e marque-o como visitado. + \end{itemize} + \item Se a fila se esvaziar sem encontrar o estado inicial, retorne $-1$. +\end{enumerate} + +\subsection*{Complexidade} + +\begin{itemize} + \item \textbf{Espacial:} $O(6!)$, pois existem $6! = 720$ possíveis permutações do tabuleiro $2 \times 3$. +\end{itemize} \ No newline at end of file