全球彩票平台_全球彩票注册平台|官网下载地址

热门关键词: 全球彩票平台,全球彩票注册平台,全球彩官网下载地址

新人求教,最小生成树算法

 1 #pragma once
 2 #include "..CommonBase.h"
 3
 4 class CDisasmContext
 5 {
 6 public:
 7     virtual bool Disasm(BYTE*& ptr)=0;
 8 protected:
 9     enum OpCodeHeader;
10 };Disasm函数用于对机器码举行深入分析并规定语义
OpCodeHeader是个枚举类型用于枚举每条指令的指令头

Stack::~Stack()
{
}
bool Stack::empty(node*&top)
{
if (top == NULL)
return true;
else
return false;
}

// CAboutDlg dialog used for App About

9 14
1 2 4
1 8 8
2 3 8
2 8 11
3 4 7
3 6 4
3 9 2
4 5 9
4 6 14
5 6 10
6 7 2
7 8 1
7 9 6
8 9 7

  if(type == S0)
  {
   //Address
   dwAddr = 0;

 1 #pragma once
 2 #include "..DisasmContext.h"
 3
 4 class CJmp : public CDisasmContext
 5 {
 6 public:
 7     virtual bool Disasm(BYTE*& ptr);
 8 protected:
 9     enum OpCodeHeader
10     {
11         JMP_SHORT = 0xEB,    // 段内一向短跳
12         JMP_NEA奥迪Q7 = 0xE9,    // 段内向来跳
13         JMP_FA本田CR-V = 0xEA,        // 段间直接跳
14         JMP_IND = 0xFF,        // 段内(外)间接跳
15     };
16
17     bool Jmp_Short(BYTE*& ptr);
18     bool Jmp_Near(BYTE*& ptr);
19     bool Jmp_Far(BYTE*& ptr);
20 };
其Disasm函数为
1 bool CJmp::Disasm(BYTE*& ptr)
2 {
3     if(Jmp_Short(ptr)) return true;
4     else if(Jmp_Near(ptr)) return true;
5     else if(Jmp_Far(ptr)) return true;
6     else return false;
7 }4.我们同样定义叁个CMov类来对Mov指令进行分析(见LibraryDisasmMov)
5.末尾大家定义四个CDisasm类来驱动全部框架(见LibraryDisasmDisasm.h)
1 class CDisasm
2 {
3 public:
4     bool Disasm(BYTE* ptr,int size);
5 protected:
6     CJmp Jmp;
7     CMov Mov;
8 };其Disasm函数为(见LibraryDisasmDisasm.cpp)
 1 bool CDisasm::Disasm(BYTE* ptr,int size)
 2 {
 3     BYTE* end = ptr size;
 4     while(ptr < end)
 5     {
 6         if(Jmp.Disasm(ptr));
 7         else if(Mov.Disasm(ptr));
 8         else return false;
 9     }
10     return true;
11 }

bool Stack::pop(node*&top, int &x)
{
node*u;
if (top == NULL)
return false;
else
{
x = top->data;
u = top;
top = top->next;
delete u;
return true;
}
}
void Stack::convert
{node *S;
int x;

// Dialog Data
enum { IDD = IDD_SCAN_DIALOG };
typedef struct ip_hdr //定义IP首部
{
UCHAR h_verlen; //4位首秘书长度,4位IP版本号
UCHA君越 tos; //8位服务类型TOS
USHORT total_len; //千克个人总市长度
USHORT ident; //16位标识
USHORT frag_and_flags; //3位标记位
UCHARAV4 ttl; //8位生存时间 TTL
UCHAR proto; //8位协议 (TCP, UDP 或其他)
USHORT checksum; //十五位IP首部校验和
ULONG sourceIP; //32位源IP地址
ULONG destIP; //32位目的IP地址
}IP_HEADER;
typedef struct tsd_hdr //定义TCP伪首部
{
ULONG saddr; //源地址
ULONG daddr; //目标地点
UCHAR mbz; //没用
UCHA揽胜 ptcl; //合同类型
USHORT tcpl; //TCP长度
}PSD_HEADER;
typedef struct tcp_hdr //定义TCP首部
{
USHORT th_sport; //15位源端口
USHORT th_dport; //14人目标端口
ULONG th_seq; //三十六人系列号
ULONG th_ack; //三十六人确认号
UCHAR th_lenres; //4位首市长度/6位保留字
UCHAR th_flag; //6位标记位
USHORT th_win; //十四人窗口大小
USHORT th_sum; //十几人校验和
USHORT th_urp; //16个人火急数据偏移量
}TCP_HEADER;
typedef struct SADDR //定义TCP首部
{
char* m_destip;
USHORT m_starpost;
USHORT m_endpost;

9 14
a b 4
a h 8
b c 8
b h 11
c d 7
c f 4
c i 2
d e 9
d f 14
e f 10
f g 2
g h 1
g i 6
h i 7

class CSrecParse
{
public:
    enum Type
    {
        S0 = 0,
        S1,
        S2,
        S3,
        S4,
        S5,
        S6,
        S7,
        S8,
        S9
    };

1 #pragma once
 2 #include "..CommonBase.h"
 3
 4 struct Register_16_Bit
 5 {
 6     // General Register
 7     struct
 8     {
 9         BYTE AH; // 8Bit
10         BYTE AL; // 8Bit
11     }AX;
12     struct
13     {
14         BYTE BH; // 8Bit
15         BYTE BL; // 8Bit
16     }BX;
17     struct
18     {
19         BYTE CH; // 8Bit
20         BYTE CL; // 8Bit
21     }CX;
22     struct
23     {
24         BYTE DH; // 8Bit
25         BYTE DL; // 8Bit
26     }DX;
27
28     // Segment Register
29     USHORT CS;
30     USHORT DS;
31     USHORT SS;
32     USHORT ES;
33
34     // Special Register
35     USHORT IP;
36     USHORT SP;
37     USHORT BP;
38     USHORT SI;
39     USHORT DI;
40     struct
41     {
42         BYTE OF : 1;
43         BYTE DF : 1;
44         BYTE IF : 1;
45         BYTE TF : 1;
46         BYTE SF : 1;
47         BYTE ZF : 1;
48         BYTE AF : 1;
49         BYTE PF : 1;
50         BYTE CF : 1;
51         BYTE Reserve : 7;
52     }FR;
53
54     Register_16_Bit()
55     {
56         memset(this,0,sizeof(Register_16_Bit));
57     }
58 };

Stack::Stack()
{
top == NULL;
}

// CscanDlg dialog

data.txt

  //The length, include <address>,<data>,<checksum> field;
  strCvrt[0] = m_strContent[m_stPos 2];
  strCvrt[1] = m_strContent[m_stPos 3];
  strCvrt[2] = '/0';
  int iLength = static_cast<int>(HexToDec(&strCvrt[0])) * 2; //Plus 2 to convert to the string length.
  
  dwSum = static_cast<int>(HexToDec(&strCvrt[0]));

2.然后大家定义一个接口来抽象出深入分析进度

void Stack::push(node*&top,int x)
{
node*s;
s = new node;
s->data = x;
s->next =top;
top = s;
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()

9 14
1 2 4
1 8 8
2 3 8
2 8 11
3 4 7
3 6 4
3 9 2
4 5 9
4 6 14
5 6 10
6 7 2
7 8 1
7 9 6
8 9 7

private:
    std::string::size_type m_stPos;
    std::string m_strContent;

1 #pragma once 2 #include "..CommonBase.h" 3 4 struct Register_16_Bit 5 { 6 // General Register 7 struct...

 do { push(S, N % 16); N /= 16; } while ; while ) { pop; if  { x =x   55; printf; } else printf; } printf;}

{
int ret = recv(sock, RecvBuf, MAX_BUFF_LEN, 0);
if (ret > 0)
{
ip = (IP_HEADER*)RecvBuf;
tcp = (TCP_HEADER*)(RecvBuf (ip->h_verlen&0x0f)*4);
str.Format, tcp->th_sport);
m_list->AddString;
}

图片 1#pragma once
图片 2
图片 3#include <iostream>
图片 4#include <vector>
图片 5#include <algorithm>
图片 6#include <functional>
图片 7#include <set>
图片 8
图片 9
图片 10template<class Vertex_Type, class Edge_Type>
图片 11class Kruskal
图片 12图片 13...{
图片 14 typedef Kruskal<Vertex_Type,Edge_Type>  Self_Type ;
图片 15protected:
图片 16 struct Edge_t
图片 17图片 18 ...{
图片 19  typedef typename Self_Type::Edge_t  Self_Type ;
图片 20  Vertex_Type v1,  v2 ;
图片 21  Edge_Type e ;
图片 22图片 23  Edge_t()...{}
图片 24  Edge_t(Vertex_Type & _v1,Vertex_Type & _v2,Edge_Type & _e) :
图片 25  v1(_v1),v2(_v2),e(_e)
图片 26图片 27  ...{}
图片 28  Edge_t(const Edge_t & edge):v1(edge.v1),v2(edge.v2),e(edge.e)
图片 29图片 30  ...{}
图片 31图片 32  Edge_t & operator=(const Edge_t & edge)...{ v1=edge.v1,v2=edge.v2,e=edge.e ;return *this ; }
图片 33图片 34  bool operator<(const Self_Type & other )const ...{   return e<other.e ;   }
图片 35  //friend istream &  operator>>(istream & in, Self_Type & edge)
图片 36  //{ in>>edge.v1>>edge.v2>>edge.e ;   return in ;  }
图片 37 };
图片 38
图片 39 //
图片 40 struct Vertex_t
图片 41图片 42 ...{
图片 43  Vertex_Type v ;
图片 44  Vertex_t * root ;
图片 45图片 46  Vertex_t()...{}
图片 47图片 48  Vertex_t(Vertex_Type & _v, Vertex_t * _r=0): v(_v),root(_r)...{}
图片 49图片 50  bool operator<(const Vertex_t & other ) const ...{  return v<other.v ;   }
图片 51图片 52  bool isRoot(void) const    ...{  return 0==root || root==this;    }
图片 53图片 54  bool isSingle(void) const   ...{  return 0==root ;          }
图片 55 };
图片 56 //
图片 57 std::vector<Edge_t> Edges ;
图片 58 std::vector<Edge_t> resultEdges ;
图片 59 size_t edgeNum ;
图片 60 size_t vertexNum ;
图片 61 std::set<Vertex_t> VexSet ;
图片 62
图片 63public:
图片 64图片 65 Kruskal():edgeNum(0),vertexNum(0)...{}
图片 66图片 67 Kruskal(size_t vNum, size_t eNum): Edges(eNum),edgeNum(eNum),vertexNum(vNum)...{}
图片 68图片 69 Kruskal(size_t vNum, size_t eNum, Edge_t & default):Edges(eNum,default),edgeNum(eNum),vertexNum(vNum)...{}
图片 70图片 71 virtual ~Kruskal() ...{}
图片 72图片 73 void setNum( size_t vNum, size_t eNum) ...{   edgeNum=eNum,vertexNum=vNum ;   }
图片 74 virtual void sort(void)
图片 75图片 76 ...{
图片 77  std::sort(Edges.begin(),Edges.end()) ;
图片 78 }
图片 79 virtual void input(std::istream & in)
图片 80图片 81 ...{
图片 82  if(Edges.size()<edgeNum)
图片 83   Edges.resize(edgeNum) ;
图片 84  for(size_t i=0; i<edgeNum;  i)
图片 85图片 86  ...{
图片 87   in>>Edges[i].v1>>Edges[i].v2>>Edges[i].e; // you may change this
图片 88   VexSet.insert(Edges[i].v1) ;
图片 89   VexSet.insert(Edges[i].v2);
图片 90  }
图片 91 }
图片 92图片 93 friend std::istream &  operator>>(std::istream & in, Self_Type & object) ...{ object.input(in) ;  return in ; }
图片 94 
图片 95 friend std::ostream &  operator<<(std::ostream & out, Self_Type & object)
图片 96图片 97 ...{
图片 98  out<<"vertex_1   vertex_2   edge  " ;
图片 99  std::vector<Edge_t>  & edges=object.resultEdges ;
图片 100  for(size_t i =0; i<edges.size() ;  i)
图片 101   out<<edges[i].v1<<" "<<edges[i].v2<<" "<<edges[i].e<<std::endl ;
图片 102  return out ;
图片 103 }
图片 104
图片 105 
图片 106
图片 107 Vertex_t & findRoot(Vertex_t & v )
图片 108图片 109 ...{
图片 110  if (v.isRoot())
图片 111   return v ;
图片 112  return findRoot(*v.root) ;
图片 113 }
图片 114
图片 115 virtual bool isInSameSet(Vertex_Type & _v1, Vertex_Type & _v2)
图片 116图片 117 ...{
图片 118  Vertex_t &  v1=findRoot(*VexSet.find(_v1)) ;
图片 119  Vertex_t &  v2=findRoot(*VexSet.find(_v2)) ;
图片 120
图片 121  if(v1.v==v2.v)
图片 122   return true ;
图片 123  if(v1.isSingle())
图片 124   v1.root=&v2 ;
图片 125  else
图片 126   v2.root=&v1 ;
图片 127
图片 128  return false;
图片 129 }
图片 130 void run(void)
图片 131图片 132 ...{
图片 133  sort() ;
图片 134  for(size_t i=0; i<edgeNum;  i)
图片 135图片 136  ...{
图片 137   Vertex_Type & v1=Edges[i].v1 ;
图片 138   Vertex_Type & v2=Edges[i].v2 ;
图片 139   if( ! isInSameSet(v1,v2) )
图片 140    resultEdges.push_back( Edges[i] );
图片 141  }
图片 142 }
图片 143};
图片 144
图片 145 
图片 146
图片 147

//----------------------------------------------------------
//Description:
// Hex convert to decade.
//
//Parameter:
// pChar : [in] The string to convert. If iLen is -1,it must be with the NULL terminate end.
// iLen : [in] The length of the pChar buffer. The default value is -1;
//
//----------------------------------------------------------
DWORD CSrecParse::HexToDec(const char *pChar,int iLen)
{
 DWORD val = 0;  
 int iCount = 0;
 while(*pChar)  
 {  
  if(*pChar >= 'a' && *pChar <= 'f')  
  {
   val = val * 16 *pChar - 'a' 10;  
  }
  else if(*pChar >= 'A' && *pChar <= 'F')
  {
   val = val * 16 *pChar - 'A' 10;
  }
  else if(*pChar >= '0' && *pChar <= '9')  
  {
   val = val * 16 *pChar - '0';  
  }
  else
  {
   break;  
  }
  pChar ;  

1.首先大家要求四个构造来代表CPU全数的13位和8位寄放器

private:
node*top;

class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();

图片 148
图片 149#include "kruskal.h"
图片 150#include <fstream>
图片 151#include <iostream>
图片 152#include <vector>
图片 153#include <algorithm>
图片 154#include <functional>
图片 155#include <set>
图片 156#include <string>
图片 157
图片 158using namespace std ;
图片 159
图片 160struct edg_t 
图片 161...{
图片 162 int vec1,vec2, weight ;
图片 163 friend istream &  operator>>(istream & in, edg_t & edg)
图片 164 ...{
图片 165  in>>edg.vec1>>edg.vec2>>edg.weight ;
图片 166  return in ;
图片 167 }
图片 168};
图片 169
图片 170bool cmp(const edg_t & left, const edg_t & right )
图片 171...{
图片 172 return left.weight<right.weight ;
图片 173}
图片 174
图片 175void kruskal(fstream & fin) ;
图片 176size_t findRoot(vector<int> & vec, int index) ;
图片 177
图片 178template<class vetex_type, class edge_type>
图片 179void test(istream &  fin)
图片 180...{
图片 181 int vecNum, edgNum ;
图片 182 fin>>vecNum>>edgNum ;
图片 183 ...{
图片 184  Kruskal<vetex_type,edge_type> sun(vecNum, edgNum) ;
图片 185  fin>>sun ;
图片 186  sun.run() ;
图片 187  cout<<sun ;
图片 188 } 
图片 189 getchar() ;
图片 190}
图片 191
图片 192int _tmain(int argc, _TCHAR* argv[])
图片 193...{
图片 194 fstream fin("data.txt",ios::in) ;
图片 195 test<string,int>(fin) ;
图片 196 test<char,int>(fin) ;
图片 197 test<int,int>(fin) ;
图片 198
图片 199 cout<<"  ---------------   " ;
图片 200
图片 201 kruskal(fin) ;
图片 202 getchar() ;
图片 203 fin.close() ;
图片 204 return 0;
图片 205}
图片 206
图片 207// find the root of the set with the vec[index] in it
图片 208size_t findRoot(vector<int> & vec, int index)
图片 209...{
图片 210 if(index>=vec.size())
图片 211  return 0 ;
图片 212 if( vec[index]==-1) // is it a root ?
图片 213  return index ;
图片 214 return findRoot(vec,vec[index]) ;
图片 215}
图片 216//
图片 217void kruskal(fstream & fin)
图片 218...{
图片 219 if(!fin)
图片 220  cout<<"Error in open file! ";
图片 221 //cout<<fin.rdbuf() ;
图片 222 int VecNum, EdgNum ;
图片 223 fin>>VecNum>>EdgNum ;
图片 224 vector<edg_t>  edgVec(EdgNum) ;
图片 225 vector<int> resultVec(VecNum,-1) ;
图片 226 for(int i=0; i<EdgNum; i )
图片 227  fin>>edgVec[i] ;
图片 228
图片 229 //step 1 : sort by edge
图片 230 sort(edgVec.begin(), edgVec.end(), ptr_fun(cmp));
图片 231
图片 232 // step 2: for each edge in the sorted @edgVec, 
图片 233 // select it's two vertex if they are not in the same set and union the two set
图片 234 for(int i=0; i<EdgNum; i )
图片 235 ...{
图片 236  edg_t &  edg=edgVec[i] ;
图片 237
图片 238  // find the two set of each vertex of the edge
图片 239  size_t lRoot=findRoot(resultVec,edg.vec1-1);
图片 240  size_t rRoot=findRoot(resultVec,edg.vec2-1);
图片 241  if(lRoot==rRoot) // are they in the same set ?
图片 242   continue ;
图片 243  // here we union the two set
图片 244  if(-1==resultVec[lRoot])
图片 245   resultVec[lRoot]=rRoot ;
图片 246  else
图片 247   resultVec[rRoot]=lRoot ;
图片 248
图片 249  cout<<edg.vec1<<" "<<edg.vec2<<" "<<edg.weight
图片 250   <<endl ; // print the result
图片 251 }
图片 252}
图片 253 
图片 254
图片 255 
图片 256
图片 257

   //The data  
   int iCount = iLength - iLenAddr - 2; //The length of 2 is checksum.
   std::string::size_type stPosBegin = m_stPos 3 iLenAddr 1;
   for(int i = 0; i < iCount; i = 2)
   {
    strCvrt[0] = m_strContent[stPosBegin i];
    strCvrt[1] = m_strContent[stPosBegin i 1];
    strCvrt[2] = '/0';
    
    BYTE uData = static_cast<BYTE>(HexToDec(&strCvrt[0]));
    vctStore.push_back(uData);
    dwSum = uData;
   }
   vctData = vctStore;

3.大家定义二个Jmp类来对Jmp指令张开剖析

#include "pch.h"
#include "Stack.h"
#include"stdio.h"
#include

#pragma once
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
//#define SIO_RCVALL_WSAIOW(IOC_VENDOR,1)
#include
#include
#include
#include "afxwin.h"
#define IPVESportage 4 //IP左券约定
#define MAX_BUFF_LEN 65500 //发送缓冲区最大值
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
#define SOURCE_PORT 8088 //local TCP segment source port
// CscanDlg dialog
class CscanDlg : public CDialogEx
{
// Construction
public:
CscanDlg(CWnd* pParent = NULL); // standard constructor

kruskal.h

//----------------------------------------------------------
//Description:
// Reset the indext to call GetNextData() to get the first data.
//
//----------------------------------------------------------
void CSrecParse::Reset(void)
{
 m_stPos = 0;
}

};

头文件// scanDlg.h : header file
//

kruskal.cpp

   bChkSum = (static_cast<BYTE>(HexToDec(&strCvrt[0])) == ( 0xFF - (dwSum & 0xFF)));
  }   

读取地点产生访谈顶牛
pragma once
typedef struct IsNode
{
int data;
struct IsNode*next;
}node,*LinkedStack;
class Stack
{
public:
Stack();
~Stack();
bool empty(node*&top);
void push(node*& top,int x);
bool pop(node*&top, int &x);
void convert;

// CscanDlg message handlers

9 14
sda erb 4
sda gggh 8
erb itc 8
erb gggh 11
itc qwed 7
itc xcvf 4
itc asdfi 2
qwed erte 9
qwed xcvf 14
erte xcvf 10
xcvf dfgg 2
dfgg gggh 1
dfgg asdfi 6
gggh asdfi 7

   for(int i = 0; i < iLenAddr; i = 2)
   {
    dwSum = HexToDec(&strCvrt[i],2);
   }

BEGIN_MESSAGE_MAP(CscanDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CscanDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

#include <string>
#include <vector>

本文由全球彩票平台发布于全球彩票注册平台编程,转载请注明出处:新人求教,最小生成树算法

TAG标签: 全球彩票平台
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。