编程第二题
赋值符号写成等号害一生!
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<unordered_map>
using namespace std;
unordered_map<int, bool> mp;
int G[6][6]={{1,2,3,4,5},{11,12,13,14,15},{21,22,23,24,25},
{31,32,33,34,35},{41,42,43,44,45}};
int dx[4] = {1, -1, 0, 0}, dy[4]={0, 0, 1, -1};
int tag;
vector<int> vx, tmp;
void dfs(int u, int v, int k){
if(tag == true) return;
if(k == 6){
int cnt = 0;
for(auto x: tmp) if(mp[x]){
cnt++;
}
if(cnt == 6){
tag = true;
}
return;
}
int t = G[u][v];
G[u][v] = 100; //标记避免重复访问 这个赋值符号写成了等号 草泥马 我再犯这种错误我是狗
tmp[k] = t;
for(int i = 0; i < 4; i++){ //搜索四个方向
int a = u + dx[i], b = v + dy[i];
if(a >= 0 && b >= 0 && a < 5 && b < 5 && G[a][b] != 100){
dfs(a, b, k + 1);
}
}
G[u][v] = t; //回溯 这里也犯了同样的错误
}
int main(){
int x;
string str;
tmp.resize(6);
char c;
while(cin >> x){
c = getchar();
mp[x] = true;
if(c == '\n'){
bool flag = true;
for(int i = 0; i < 5 && flag; i++){
for(int j = 0; j < 5; j++){
if(x==G[i][j]){
tag = false;
dfs(i, j, 0);
if(tag){
cout<<1<<endl;
flag = false;
break;
}
}
}
}
if(flag) cout<<0<<endl;
vx.clear();
mp.clear();
tmp.clear();
}
}
return 0;
}