# Array# Simulation

f418 - Word Search Puzzle

🔗 前往 ZeroJudge 原題

題目描述

題目要求根據給定的字謎大小、起始座標和結束座標,從字謎中提取並輸出對應的單字。單字提取的路徑可以是水平、垂直或對角線。

解題思路

題目描述了四種可能的路徑:

  1. 從 (x1, y1) 到 (x2, y2) 的對角線 (x1-x2 == y1-y2)。
  2. 從 (x1, y1) 到 (x2, y2) 的水平線 (x1 == x2)。
  3. 從 (x1, y1) 到 (x2, y2) 的垂直線 (y1 == y2)。
  4. 從 (x1, y1) 到 (x2, y2) 的反對角線。

程式碼根據這四種情況,使用迴圈迭代字謎,並將對應的字元輸出。

複雜度分析

  • 時間複雜度: O(max(h, w)),因為最壞情況下需要遍歷字謎的行或列。
  • 空間複雜度: O(1),程式只使用了常數級的額外空間。

程式碼

#include <iostream>
using namespace std;
int h,w,x1,y1,x2,y2;
char a[101][101];
int main(){
	cin >> h >> w >> x1 >> y1 >> x2 >> y2;
	for(int i=1;i<=h;++i)
		for(int j=1;j<=w;++j)
			cin >> a[i][j];
	if(x1-x2==y1-y2)
		for(int i=x1,j=y1;i<=x2;++i,++j)
			cout << a[i][j];
	else if(x1==x2)
		for(int i=y1;i<=y2;++i)
			cout << a[x1][i];
	else if(y1==y2)
		for(int i=x1;i<=x2;++i)
			cout << a[i][y1];
	else
		for(int i=x1,j=y1;i<=x2;++i,--j)
			cout << a[i][j];
}

Discussion