单链表的反转
定义3个结点,返回反转后的头结点
ListNode* ReverseList(ListNode* pHead) {
ListNode* pReversedHead = NULL;
ListNode* pNode = pHead;
ListNode* pPrev = NULL;
while (pNode != NULL) {
ListNode* pNext = pNode->m_pNext;
if (pNext == NULL)
pReversedHead = pNode;
pNode->m_pNext = pPrev;
pPrev = pNode;
pNode = pNext;
}
return pReversedHead;
}
8皇后算法(回溯法)
int n=8;
int total=0;
int *c=new int(n);
bool is_ok(int row){
for(int j=0;j!=row;j++){
//同一行 两边对角线 不符合条件
if(c[row]==c[j] || row-c[row]==j-c[j] || row+c[row]==j+c[j])
return false;
}
return true;
}
void queen(int row){
//符合条件就累加一次
if(row==n)
total++;
else
for(int col=0;col!=n;col++){
//记录每次的行号。
c[row]=col;
if(is_ok(row))
queen(row+1); //当前棋子符合条件,计算下一个棋子
else //不符合就记录下一个行号 ,啥也不干
;
}
}
int main(){
queen(0);
cout<<total;
return 1;
}
扫描关注我
(转载本站文章请注明作者和出处 Undefined)