# 給小芃睿的(後面有東西)
會常用到的總共有四個功能
push、top、pop、empty
## Sol1:
```cpp=
#include<stack>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
int n;
stack <char> st1;
string s;
while(cin >> n)
{
getchar();
for(int i = 0; i < n; i ++)
{
getline(cin,s);
while (!st1.empty())
{
st1.pop();
}
int l = s.length();
for (int j = 0; j < l; j ++)
{
if (st1.empty())
{
st1.push(s[j]);
continue;
}
if (st1.top() == '(')
{
if (s[j] == ')')
{
st1.pop();
continue;
}
}
if (st1.top() == '[')
{
if (s[j] == ']')
{
st1.pop();
continue;
}
}
st1.push(s[j]);
}
if (st1.empty()) cout <<"Yes"<<endl;
else cout <<"No"<<endl;
}
}
}
```
## Sol2:
```cpp=
#include <bits/stdc++.h>
int main()
{
char in[210], ch[7]="([{)]}";
int S[210], top; // stack
while (scanf("%s",in)!=EOF)
{
top=-1; // clear stack
int len=strlen(in);
assert(len<=150);
bool error=false;
for (int i=0; i<len; i++)
{
int k=strchr(ch,in[i])-ch;
//or using: for (k=0; k<6 && ch[k]!=in[i]; k++);
assert(k<6); // no invalid char
if (k<3) // left
S[++top]=k; // push
else
{
if (top<0 || k!=S[top]+3) //mismatch
{
error=true;
break;
}
top--; // pop
}
}
if (top>=0) error=true;
printf((error)?"no\n":"yes\n");
}
return 0;
}
```
## 439-Knight Moves
筆記:
BFS
用陣列紀錄可能的移動位置
為了把兩個變數存入queue用pair
```cpp=
#include<iostream>
#include<queue>
#include<string.h>
#define N 8
using namespace std;
int main()
{
ios::sync_with_stdio(0);
int dx[8] = {1, 1, -1, -1, 2, 2, -2, -2};
int dy[8] = {2, -2, 2, -2, 1, -1, 1, -1};
int step[10][10];
char first_char, sce_char;
int first_int, sce_int;
while(cin >> first_char >> first_int >> sce_char >> sce_int)
{
memset(step,-1,sizeof(step));
queue <pair<int,int> > q;
int red_row = sce_int;
int red_col = sce_char - 96;
pair <int,int> start = make_pair(first_int,first_char-96);
q.push(start);
step[first_int][first_char-96] = 0;
while(!q.empty())
{
pair <int, int> cur = q.front();
q.pop();
int row = cur.first;
int col = cur.second;
if (row == red_row && col == red_col)
{
cout <<"To get from "<<first_char<<first_int<< " to "<<sce_char<<sce_int<<" takes "<<step[row][col]<<" knight moves."<<endl;
break;
}
for(int i = 0; i < 8; i ++)
{
int new_row = row + dx[i];
int new_col = col + dy[i];
if (new_row < 1 || new_col < 1 ||new_col > N|| new_row > N) continue;
if (step[new_row][new_col] != -1) continue;
step[new_row][new_col] = step[row][col]+1;
pair <int, int> next = make_pair(new_row, new_col);
q.push(next);
}
}
}
}
```