資源簡介
實現多邊形游戲算法,時間復雜度O(n^3),網上大多數此算法的代碼有誤,里面包含有測試樣例。

代碼片段和文件信息
#include?
#define??SIZE??100
using?namespace?std;
int???m[SIZE][SIZE+1][2];
int??v[SIZE]?Deleteis;
char?op[SIZE];
void?MinMax(int?n?int?i?int?s?int?j?int?&minf?int?&maxf)
{
????int?r;
????int?a?b?c?d;
????r?=?(i?+?s)?%?n;
????//初始化子鏈的最大和最小值
????a?=?m[i][s][0];??b?=?m[i][s][1];
????c?=?m[r][j-s][0];?d?=?m[r][j-s][1];
????
????if(op[(r-1)]?==?‘+‘)
????{
????????minf?=?a?+?c;
????????maxf?=?b?+?d;
????}
????else
????{
????????int?value[4];
????????value[0]?=?a?*?c;??value[1]?=?b?*?d;
????????value[2]?=?a?*?d;??value[3]?=?b?*?c;?
????????minf?=?value[0];?maxf?=?value[0];
????????
????????for(int?k?=?1;?k?4;?k++)
????????{
????????????if(value[k]?????????????????minf?=?value[k];
????????????if(value[k]?>?maxf)
????????????????maxf?=?value[k];
????????}
????}
}
int?PolyMax(int?n)
{
????int?minf?maxf;
????for(int?j?=?2;j?<=?n;?j++)
{
for(int?i?=?0;i?????????????for(int?s?=?1;?s?????????????{
????????????????MinMax(n?i?s?j?minf?maxf);
????????????????if(m[i][j][0]?>?minf?||?m[i][j][0]?==?0)?
m[i][j][0]?=?minf;
????????????????if(m[i][j][1]? m[i][j][1]?=?maxf;
????????????}
}
????int??temp;
????temp?=?m[0][n][1];
????for(int?p?=?1;?p? if(temp? {
temp?=?m[p][n][1];
Deleteis?=?p;
}
return?temp;
}
int?main()
{
????int?MaxGrade?i;
????int?n;
????Label:
????cout?<“輸入頂點數(大于2):“?<????while(cin?>>?n?n?>?2)
????{
cout?<“輸入定點和運算符:“?< for(i?=?0;?i? {
cin?>>?v[i]?>>?op[i];
m[i][1][0]?=?v[i];
m[i][1][1]?=?v[i];????????
}
MaxGrade?=?PolyMax(n);?
cout?<“第一次刪除的邊是?:\n“?< cout?<“可獲得的最高分為?:\n“?< cout?<“\n輸入頂點數(大于2):“?<????}
????cout?<“請重新輸入!“?<????goto?Label;?
????system(“pause“);
????return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????118??2013-03-18?21:01??PolyGame(測試).txt
?????文件???????1982??2013-03-18?21:01??PolyGame.cpp
-----------?---------??----------?-----??----
?????????????????2100????????????????????2
- 上一篇:隨機牛頓法
- 下一篇:華為海思和高通手機固件解包工具
評論
共有 條評論