0
我正在寫一個程序找到,如果我可以用N長度爲N支一個正方形。 我已經使用Bitmask使它更容易輸入大量的內容。出於某種原因,我回溯它的代碼不返回任何東西,在這條線「位掩碼&(1 < < VEC [1])」它永遠不會去。如果使用了錯誤的功能IM 有人能幫助我嗎?我最近了解到這一點,但我找不到信息。位掩碼功能
PD:我不是說英語的人,對不起我的語法和句法問題。
感謝
// 10364 - Square.cpp: archivo de proyecto principal.
#include "stdafx.h"
#include <stdio.h>
#include <vector>
using namespace std;
vector<int> vec;
int bitmask,casos,palitos,suma,maximo;
bool analiza(int analizado,int lados)// lados =cantidad lados analizados, contador
{
if (analizado==maximo)
{
analizado=0;
lados++;
}
if(lados==4)
{
printf("yes\n");
return true;
}
for (int i=0;i<palitos;i++)
{
if (!(bitmask & (1 << i)))
{
if (analizado+vec[i]<=maximo)
{
bitmask | (1 << i);
if(analiza(analizado+1,lados))
return true;
bitmask & ~(1 << i);
}
}
}
return false;
//prender: bitmask | (1 << indice)
//apagar: bitmask & ~(1 << indice)
/*comparar: bitmask & (1 << indice)*/
}
int main()
{
freopen("in.txt","rt",stdin);
freopen("out.txt","wt",stdout);
scanf("%d\n",&casos);
for(int i=0;i<casos;i++)
{
scanf("%d",&palitos);
vec.clear();
vec.resize(palitos);
suma=0;
for(int j=0;j<palitos;j++)
{
scanf("%d",&vec[j]);
suma+=vec[j];
}
if(suma%4!=0)
printf("no\n");
else{
bitmask=0;
maximo=suma/4;
analiza(0,0);
}
}
return 0;
}
但funtions都OK分辯? – Giuseppe
由於某種原因,在這行if(!(bitmask&(1 << vec [i])))),它繼續進行,並ive關閉位掩模,然後我使用遞歸函數,idk爲什麼我不能關閉它。 – Giuseppe
但是,掩碼爲0,它的初始化,它應該擁有所有的旗幟在零值 – Giuseppe