int youfen(int pc,int depth2,int jz)//你的分数 ,jz剪枝 { int fa=player_color+computer_color-pc; int n=empty_node.size(); int i,j,i2; vector<node> en; en=empty_node; node e,e2; priority_queue< node ,vector<node> ,less<node> > pen; for(i=0;i<n;i++) { e=en.back(); en.pop_back(); empty_value(e,fa); pen.push(e); } int min_value=max2,c; int wide2=wide; if(wide2>n)wide2=n; node te[50]; for(i=0;i<wide2;i++) { te[i]=pen.top(); pen.pop(); } sixnode se[20]; int secnt=0; for(i=0;i<wide2;i++) for(j=i+1;j<wide2;j++) { se[secnt].x1=te[i].i; se[secnt].y1=te[i].j; se[secnt].x2=te[j].i; se[secnt].y2=te[j].j; secnt++; } int chessbored2[chessbored_size][chessbored_size]; szfz(chessbored,chessbored2); for(i=0;i<secnt;i++) { vector<node> empty_node2; empty_node2=empty_node; before_move(se[i].x1,se[i].y1); before_move(se[i].x2,se[i].y2); chessbored[se[i].x1][se[i].y1]=fa; chessbored[se[i].x2][se[i].y2]=fa; if(near_num(se[i].x1,se[i].y1)>5) { empty_node=empty_node2; szfz(chessbored2,chessbored); return fen_min; } if(near_num(se[i].x2,se[i].y2)>5) { empty_node=empty_node2; szfz(chessbored2,chessbored); return fen_min; } updata_empty_node(se[i].x1,se[i].y1); updata_empty_node(se[i].x2,se[i].y2); int fenshu; fenshu=myfen(pc,depth2+1,min_value); if(fenshu<min_value) { min_value=fenshu; } empty_node=empty_node2; szfz(chessbored2,chessbored); } return min_value; }你能和我解释一下这个函数吗
时间: 2024-03-04 14:50:02 浏览: 40
这个函数是用来计算某个落子方式下,你的分数的。它的参数包括:当前玩家所下的颜色pc、搜索的深度depth2以及剪枝参数jz。函数首先计算出当前棋盘上所有空节点的得分,然后选取其中得分最高的若干个节点进行搜索,搜索过程中尝试每一种可能的落子方式,并计算对手的最佳应对。最终返回的是对手最佳应对中的最小分数。这个函数中的变量和函数调用的细节比较多,需要结合整个程序的逻辑来理解。
阅读全文