求问各位大佬,这个代码在洛谷上跑了9.34s,时间限制1s,但是开不开O2都能A,求问这是为什么
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e4+5;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
w=(~w)+1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=(s<<3)+(s<<1)+(ch&15);
ch=getchar();
}
return s*w;
}
inline void write(int x){
if(x<0){
putchar('-');
x=(~x)+1;
}
if(x>9){
write(x/10);
}
putchar(x%10|48);
}
int T,ca,cb,n;
bool vis[MAXN][MAXN];
struct node{
int x,y;
vector<int> adj;
};
void bfs(){
memset(vis,0,sizeof(vis));
queue<node>q;
node tmp;
tmp.x=0,tmp.y=0;
vis[0][0]=1;
q.push(tmp);
while(!q.empty()){
node now=q.front();
q.pop();
if(now.y==n){
cout<<now.adj.size()<<' ';
for(auto &i : now.adj){
cout<<i<<' ';
}
cout<<endl;
return ;
}
for(int i=1;i<=6;i++){
tmp=now;
if(i==1){
if(now.x!=ca){
if(!vis[ca][now.y]){
tmp.x=ca;
tmp.adj.push_back(i);
vis[tmp.x][tmp.y]=1;
q.push(tmp);
}
}
}
else if(i==2){
if(now.y!=cb){
if(!vis[now.x][cb]){
tmp.y=cb;
tmp.adj.push_back(i);
vis[tmp.x][tmp.y]=1;
q.push(tmp);
}
}
}
else if(i==3){
if(now.x!=0){
if(!vis[0][now.y]){
tmp.x=0;
tmp.adj.push_back(i);
vis[tmp.x][tmp.y]=1;
q.push(tmp);
}
}
}
else if(i==4){
if(now.y!=0){
if(!vis[now.x][0]){
tmp.y=0;
tmp.adj.push_back(i);
vis[tmp.x][tmp.y]=1;
q.push(tmp);
}
}
}
else if(i==5){
if(now.y){
if(ca-now.x>=now.y&&!vis[now.x+now.y][0]){
tmp.x+=now.y;
tmp.y=0;
tmp.adj.push_back(i);
vis[tmp.x][tmp.y]=1;
q.push(tmp);
}
else if(ca-now.x<now.y&&!vis[ca][now.y-ca+now.x]){
tmp.x=ca;
tmp.y-=(ca-now.x);
tmp.adj.push_back(i);
vis[tmp.x][tmp.y]=1;
q.push(tmp);
}
}
}
else{
if(now.x){
if(cb-now.y>=now.x&&!vis[0][now.y+now.x]){
tmp.y+=now.x;
tmp.x=0;
tmp.adj.push_back(i);
vis[tmp.x][tmp.y]=1;
q.push(tmp);
}
else if(cb-now.y<now.x&&!vis[now.x-cb+now.y][cb]){
tmp.y=cb;
tmp.x-=(cb-now.y);
tmp.adj.push_back(i);
vis[tmp.x][tmp.y]=1;
q.push(tmp);
}
}
}
}
}
return ;
}
int main(){
std::ios::sync_with_stdio(false);
T=read();
while(T--){
ca=read(),cb=read(),n=read();
bfs();
}
return 0;
}