常用算法题c++解析

2019/04/20

单链表的反转

定义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

Post Directory