int graph_is_edge (graph_t *g, int a, int b) { int aa, bb; unsigned long pos; aa = a; bb = b; if (a == b) { return 0; } pos = (unsigned long)BITPOS(aa, bb, g->nodes); return (int)BitValue(g->barray, pos); }
bool Sudoku::ScreenPossibility(int pos_x, int pos_y) { bool Modification = false; GridLimits Lim; int i,j; Lim.SetLimits(pos_x, pos_y); int possib = possibilities[pos_y-1][pos_x-1]; //int possib = POS_ALL; // for variation in +ve x for(i= pos_y - 1, j = pos_x - 1; j < 9; ++j ) if(DeleteValue(Grid[i][j], possib)) Modification = true; // for variation in -ve x for(i= pos_y - 1, j = pos_x - 1; j >= 0; --j ) if(DeleteValue(Grid[i][j], possib)) Modification = true; // for variation in +ve y for(i= pos_y - 1, j = pos_x - 1; i < 9; ++i ) if(DeleteValue(Grid[i][j], possib)) Modification = true; // for variation in -ve y for(i= pos_y - 1, j = pos_x - 1; i >= 0; --i ) if(DeleteValue(Grid[i][j], possib)) Modification = true; for(i = Lim.Y_Top; i <= Lim.Y_End; ++i ) for(j = Lim.X_Top; j <= Lim.X_End; ++j ) DeleteValue(Grid[i][j], possib); possibilities[pos_y-1][pos_x-1] = possib; if (possib == 0x0) // sets the trigger for zero possibilities ZeroPossibilities = true; //(possibilityCount[pos_y - 1][pos_x -1] -= count); //std::cout<<possibilityCount[pos_y - 1][pos_x -1]; if(SinglePossibilityElement(possib)) { Grid[pos_y-1][pos_x-1] = BitValue(possibilities[pos_y - 1][pos_x -1]); //std::cout<<"\n\n Got You!" << possibilities[pos_y - 1][pos_x -1]<<"\n"; } return Modification; }
/* returns degress of a node */ int graph_node_degree (graph_t *g, int a) { int i, n; unsigned int aa, bb; unsigned long pos; n = 0; for (i = 0; i < g->nodes; i++) { aa = (unsigned int)a; bb = (unsigned int)i; pos = 0; pos = (unsigned long)BITPOS(aa,bb,g->nodes); if (BitValue(g->barray,pos) && (a != i)) { n++; } } return n; }
void print_graph (graph_t *g) { int n; int i; unsigned long pos; int j = 0; n = g->nodes; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (j > i) { pos = (unsigned long)BITPOS(i,j,g->nodes); if (BitValue(g->barray, pos)) { printf ("e %2d %2d\n", i, j); } } } } }
uchar AngleMode(void) { #define CON_ANGLEMODE_POINT_VI 0 // 80 #define CON_ANGLEMODE_POINT_DELAY1 100 #define CON_ANGLEMODE_POINT_DELAY2 120 #define CON_ANGLEMODE_POINT_DELAY3 140 #define CON_ANGLEMODE_POINT_DELAY4 160 #define CON_ANGLEMODE_POINT_VV 1 // 180 #define CON_ANGLEMODE_POINT_MAX 2 // 250 uchar n; u16 uiTemp; // AA 第0 秒不处理 AAA if(0==RSOFT_RTC_SECOND) { return DLT_RET_SUCC; } else { { if(ucAde7878CfModeTime<CON_ADE7878_CFMODE_TIME_MAX) { return DLT_RET_SUCC; } if(CON_ANGLEMODE_POINT_VI==ucAngleModePoint) { // AA----各相电压和各相电流之间的夹角--->Start----AAA for(n=0;n<3;n++) { if(1==ReadADReg(TB_AD7878_ANGLE[n],2, &Wr_data[0])) { uiTemp=Wr_data[0]; uiTemp=uiTemp*256+Wr_data[1]; uiTemp = ((ulong)uiTemp)*7042/10000; // 当前相电流小于启动电流或者当前相电压欠压,不判断该相角度 if(0==JudjeFunction05Ib(n)) { uiTemp=0; } if(BitValue(n)==(ucVoltageLowStatusABC&BitValue(n))) { uiTemp=0; } IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AI+CON_ANGLE_DATA_LEN*n]);// xxxx dot xxxx } } if(PROGFUNCTION_TYPE_METER_TYPE==METERTYPE_3_3) { memset(&RAM[RAM_CURRENT_ANGLE_AV_AI+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN); } // AA----各相电压和各相电流之间的夹角--->End----AAA /*if(1!=ReadADRegResumeData(AD_VIRTUALREG_CHECKSUMSAVE0,4,&Wr_data[0])) { memset(&Wr_data[0], 0xff, 4); } if(4==TestZeroNum(&Wr_data[0], 4)) { ReadADReg(AD_COMPMODE,2,&Wr_data[0]); Wr_data[0]=0x02; } else*/ { Wr_data[0]=0x02; Wr_data[1]=0x3f; } WriteADReg(&Wr_data[0],AD_COMPMODE,2); // Delay(41000);//aaa 30mS=41000 aaa } /*if(CON_ANGLEMODE_POINT_DELAY1==ucAngleModePoint) { SysDelayMs(7); } if(CON_ANGLEMODE_POINT_DELAY2==ucAngleModePoint) { SysDelayMs(7); } if(CON_ANGLEMODE_POINT_DELAY3==ucAngleModePoint) { SysDelayMs(7); } if(CON_ANGLEMODE_POINT_DELAY4==ucAngleModePoint) { SysDelayMs(7); }*/ if(CON_ANGLEMODE_POINT_VV==ucAngleModePoint) { // AA----A相电压和各相电压之间的夹角--->Start----AAA if(PROGFUNCTION_TYPE_METER_TYPE==METERTYPE_3_3) { // AA----ANGLE0=AC----AA if(1==ReadADReg(TB_AD7878_ANGLE[0],2, &Wr_data[0])) { uiTemp=Wr_data[0]; uiTemp=uiTemp*256+Wr_data[1]; uiTemp = ((ulong)uiTemp)*7042/10000; IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2]);// xxxx dot xxxx } memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*0], 0x00, CON_ANGLE_DATA_LEN); memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN); if((0x05&ucVoltageLowStatusABC)) { memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2], 0x00, CON_ANGLE_DATA_LEN); } } else { // AA----A------AA memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*0], 0x00, CON_ANGLE_DATA_LEN); // AA----ANGLE2=AB----AA if(1==ReadADReg(TB_AD7878_ANGLE[2],2, &Wr_data[0])) { uiTemp=Wr_data[0]; uiTemp=uiTemp*256+Wr_data[1]; uiTemp = ((ulong)uiTemp)*7042/10000; IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1]);// xxxx dot xxxx } if(0x01&ucVoltageLowStatusABC) { memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN); // AA----ANGLE0=AC----AA if(1==ReadADReg(TB_AD7878_ANGLE[1],2, &Wr_data[0])) { uiTemp=Wr_data[0]; uiTemp=uiTemp*256+Wr_data[1]; uiTemp = ((ulong)uiTemp)*7042/10000; IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2]);// xxxx dot xxxx } } else { // AA----ANGLE0=AC----AA if(1==ReadADReg(TB_AD7878_ANGLE[0],2, &Wr_data[0])) { uiTemp=Wr_data[0]; uiTemp=uiTemp*256+Wr_data[1]; uiTemp = ((ulong)uiTemp)*7042/10000; IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2]);// xxxx dot xxxx } } if(0x03==(0x03&ucVoltageLowStatusABC)) { memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*0], 0x00, CON_ANGLE_DATA_LEN); memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN); memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2], 0x00, CON_ANGLE_DATA_LEN); } if(0x02==(0x02&ucVoltageLowStatusABC)) { memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN); } if(0x04==(0x04&ucVoltageLowStatusABC)) { memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2], 0x00, CON_ANGLE_DATA_LEN); } } // AA----A相电压和各相电压之间的夹角--->End---AAA // AA----A相电压和各相电流之间的夹角--->Start----AAA //AA ANGLE --->AV and AI RAM[RAM_CURRENT_ANGLE_AI_AV+0]=RAM[RAM_CURRENT_ANGLE_AV_AI+0]; RAM[RAM_CURRENT_ANGLE_AI_AV+1]=RAM[RAM_CURRENT_ANGLE_AV_AI+1]; //AA ANGLE --->AV and BI if(PROGFUNCTION_TYPE_METER_TYPE==METERTYPE_3_3) { memset(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN); } else { uiTemp=ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1+0)+ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AI+CON_ANGLE_DATA_LEN*1+0); uiTemp=uiTemp%3600; IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1]); } //AA ANGLE --->AV and BI uiTemp=ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2+0)+ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AI+CON_ANGLE_DATA_LEN*2+0); uiTemp=uiTemp%3600; IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2]); // AA----A相电压和各相电流之间的夹角--->End----AAA // AA----三相三线电压相序判断--->Start----AAA /* // AA 关于三相三线电压逆向序判断的分析 AA // AA 在一般的情况下,三相三线的AC相位差都是300度左右 AA // AA 在逆相序的情况下,三相三线的AC的相位差在60度 AA // AA 所以,个人认为,要是小于180度,则认为是逆相序了。 AA // AA AA */ if(PROGFUNCTION_TYPE_METER_TYPE==METERTYPE_3_3) { if(0==(0x05&ucVoltageLowStatusABC)) { uiTemp=ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2+0); if(uiTemp<1800) { status_5460_1=0x80; } else { status_5460_1=0x00; } } } else { //三相三线是错的,但四线是准的 if(1==ReadADReg(AD_STATUS1,4, &Wr_data[0])) { if((0x8&Wr_data[1])==0) { status_5460_1=0x00; } else { status_5460_1=0x80; } } memset(&Wr_data[0], 0xFF, 4); WriteADReg(&Wr_data[0], AD_STATUS1, 4); } // AA----三相三线电压相序判断--->End----AAA // AA----三线四线电流相序判断--->Start----AAA if(PROGFUNCTION_TYPE_METER_TYPE!=METERTYPE_3_3) // AA ----三相四线的情况下------- AAA { if((0==ucVoltageLowStatusABC)&&(0==(0x80&status_5460_1))) // AA ----不断相的情况下------- AAA { if(3==(JudjeFunction05Ib(0)+JudjeFunction05Ib(1)+JudjeFunction05Ib(2))) // AA ----电流比较大的情况下------- AAA { /* // AA 关于电流逆向序的分析 AA // AA | 各种类型 --> 3者关系 | 相序 |AA // AA | A>B A>C B>C --> A>B>C | ERR | AA // AA | A>B A>C B<C --> A>C>B | OK | AA // AA | A>B A<C B>C --> ERR | ERR | AA // AA | A>B A<C B<C --> C>A>B | ERR | AA // AA | A<B A>C B>C --> B>A>C | OK | AA // AA | A<B A>C B<C --> ERR | ERR | AA // AA | A<B A<C B>C --> B>C>A | ERR | AA // AA | A<B A<C B<C --> C>B>A | OK | AA // AA 通过分析,判定只有3 种情况下电流不逆向序 AA // AA 其他情况下,电流都是逆向序的 AA */ ORDERCURRENTSTATUS_NO; if(Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1])) // a>b { if(Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2])) // b>c { ORDERCURRENTSTATUS_YES; // A>B>C } if(Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0])) // b>c { ORDERCURRENTSTATUS_YES; // C>A>B } } else { if((Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2])) &&(Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0]))) { ORDERCURRENTSTATUS_YES; // B>C>A } } } } } // AA----三线四线电流相序判断--->End----AAA else // AA----三相三线电流相序判断--->Start----AAA { if((0==(0x05&ucVoltageLowStatusABC))&&(2==(JudjeFunction05Ib(0)+JudjeFunction05Ib(2)))) { uiTemp=ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2+0); if(uiTemp<ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0+0)) { uiTemp=uiTemp+3600; } uiTemp=uiTemp-ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0+0); if(uiTemp<1800) { ORDERCURRENTSTATUS_YES; } else { ORDERCURRENTSTATUS_NO; } } } // AA----三相三线电流相序判断--->End----AAA /*if(1!=ReadADRegResumeData(AD_VIRTUALREG_CHECKSUMSAVE0,4,&Wr_data[0])) { memset(&Wr_data[0], 0xff, 4); } if(4==TestZeroNum(&Wr_data[0], 4)) { ReadADReg(AD_COMPMODE,2,&Wr_data[0]); Wr_data[0] =0x00; } else*/ { Wr_data[0]=0x00; Wr_data[1]=0x3f; } WriteADReg(&Wr_data[0],AD_COMPMODE,2); } ucAngleModePoint++; if(ucAngleModePoint>=CON_ANGLEMODE_POINT_MAX) { ucAngleModePoint=0; } } } return DLT_RET_SUCC; }