题目:多边形游戏问题
内容:按照要求输入多边形的边和顶点,游戏第一步:删除一条边,随后的n-1步按以下方式操作:
选择一条边E以及由E连接着的2个顶点v1和v2
用一个新的顶点取代边E以及由E连着的2个顶点v1和v2。将由顶点v1和v2的整数值通过边E上的运算得到的结果赋予新顶点。直到最后,所有边被删除,确认使结果达到最大值的删除方式和最大值。
程序源代码如下(c++实现)
//只考虑正数顶点情况下的代码#includeiostream#includeiomanipusingnamespacestd;constintN=;intv[N],m[N][N],Break_point[N][N];charop[N];voidDo_Max(inti,intj,ints,intn,intmaxf){intb=m[i][s],r=(i+s-1)%n+1,d=m[r][j-s];if(op[r]==){maxf=b+d;}else{maxf=b*d;}}voidPolyMax(intn){intmaxf;for(intj=2;j=n;j++){for(inti=1;i=n;i++){for(ints=1;sj;s++){Do_Max(i,j,s,n,maxf);if(m[i][j]maxf){m[i][j]=maxf;Break_point[i][j]=s;}}}}intMax_num=m[1][n];intFirst_op=1;for(inti=2;i=n;i++){if(Max_numm[i][n]){Max_num=m[i][n];First_op=i;}}coutendl;cout"最小值"endl;for(inti=1;i=n;i++){for(intj=1;j=n;j++){coutsetw(5)setfill()m[i][j];}coutendl;}coutendl;cout"最大值位置:"endl;for(inti=1;i=n;i++){for(intj=1;j=n;j++){coutsetw(5)setfill()Break_point[i][j];}coutendl;}coutendl;cout"第一个删边位置为第"First_op"条边"endl;coutendl;cout"最大值结果为:"Max_numendl;}intmain(){intn;cout"请输入多边形点数:";cinn;for(inti=1;i=n;i++){cout"请顺时针输入第"i"点的操作数和其后的运算符(+/*):\n";cinv[i]op[i+1];m[i][1]=m[i][1]=v[i];}PolyMax(n);return0;}预览时标签不可点收录于合集#个上一篇下一篇